jm-insns.c revision 9f4e472e71cf49860745eaf439a021f00ddc2c7c
1a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* HOW TO COMPILE:
3a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4a2a583876ee4197d0284960aeb594dc75bce2f09cerion* 32bit build:
5c8741428225d78e61dc5315515f92f0faa666440bart   gcc -Winline -Wall -g -O -mregnames -maltivec
6a2a583876ee4197d0284960aeb594dc75bce2f09cerion* 64bit build:
7c8741428225d78e61dc5315515f92f0faa666440bart   gcc -Winline -Wall -g -O -mregnames -maltivec -m64
8a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
9a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjThis program is useful, but the register usage conventions in
10a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjit are a complete dog.  In particular, _patch_op_imm has to
11a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjbe inlined, else you wind up with it segfaulting in
12a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjcompletely different places due to corruption (of r20 in the
13a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjcase I chased).
14a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
15a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
16a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/*
17a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * test-ppc.c:
18a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * PPC tests for qemu-PPC CPU emulation checks
19a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
20a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Copyright (c) 2005 Jocelyn Mayer
21a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
22a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   This program is free software; you can redistribute it and/or
23a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   modify it under the terms of the GNU General Public License V2
24a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   as published by the Free Software Foundation
25a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
26a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   This program is distributed in the hope that it will be useful,
27a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   but WITHOUT ANY WARRANTY; without even the implied warranty of
28a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
29a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   GNU General Public License for more details.
30a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
31a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   You should have received a copy of the GNU General Public License
32a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   along with this program; if not, write to the Free Software
33a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
34a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
35a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
36a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/*
37a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Theory of operations:
38a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * a few registers are reserved for the test program:
39a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * r14 => r18
40a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * f14 => f18
41a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * I do preload test values in r14 thru r17 (or less, depending on the number
42a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * of register operands needed), patch the test opcode if any immediate
43a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * operands are required, execute the tested opcode.
44a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * XER, CCR and FPSCR are cleared before every test.
45a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * I always get the result in r17 and also save XER and CCR for fixed-point
46a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * operations. I also check FPSCR for floating points operations.
47a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
48a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Improvments:
49a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * a more clever FPSCR management is needed: for now, I always test
50a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * the round-to-zero case. Other rounding modes also need to be tested.
51a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
52a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
53a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/*
54cfe949112586ed0423a6064ae91ad3046f282869cerion * Operation details
55cfe949112586ed0423a6064ae91ad3046f282869cerion * -----------------
56a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * The 'test' functions (via all_tests[]) are wrappers of single asm instns
57a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
58a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * The 'loops' (e.g. int_loops) do the actual work:
59a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *  - loops over as many arguments as the instn needs (regs | imms)
60a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *     - sets up the environment (reset cr,xer, assign src regs...)
61a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *     - maybe modifies the asm instn to test different imm args
62a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *     - calls the test function
63a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *     - retrieves relevant register data (rD,cr,xer,...)
64a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *     - prints argument and result data.
65a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
66a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * More specifically...
67a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
68a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * all_tests[i] holds insn tests
69a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *  - of which each holds: {instn_test_arr[], description, flags}
70a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
71a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * flags hold 3 instn classifiers: {family, type, arg_type}
72a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
73a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * // The main test loop:
74a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * do_tests( user_ctl_flags ) {
75a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *    foreach(curr_test = all_test[i]) {
76a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
77a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       // flags are used to control what tests are run:
78a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       if (curr_test->flags && !user_ctl_flags)
79a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *          continue;
80a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
81a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       // a 'loop_family_arr' is chosen based on the 'family' flag...
82a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       switch(curr_test->flags->family) {
83a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       case x: loop_family_arr = int_loops;
84a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *      ...
85a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       }
86a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
87a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       // ...and the actual test_loop to run is found by indexing into
88a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       // the loop_family_arr with the 'arg_type' flag:
89a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       test_loop = loop_family[curr_test->flags->arg_type]
90a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
91a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       // finally, loop over all instn tests for this test:
92a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       foreach (instn_test = curr_test->instn_test_arr[i]) {
93a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
94a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *          // and call the test_loop with the current instn_test function,name
95a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *          test_loop( instn_test->func, instn_test->name )
96a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       }
97a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *    }
98a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * }
99cfe949112586ed0423a6064ae91ad3046f282869cerion *
100cfe949112586ed0423a6064ae91ad3046f282869cerion *
101cfe949112586ed0423a6064ae91ad3046f282869cerion * Details of intruction patching for immediate operands
102cfe949112586ed0423a6064ae91ad3046f282869cerion * -----------------------------------------------------
103cfe949112586ed0423a6064ae91ad3046f282869cerion * All the immediate insn test functions are of the form {imm_insn, blr}
104cfe949112586ed0423a6064ae91ad3046f282869cerion * In order to patch one of these functions, we simply copy both insns
105cfe949112586ed0423a6064ae91ad3046f282869cerion * to a stack buffer, and rewrite the immediate part of imm_insn.
106cfe949112586ed0423a6064ae91ad3046f282869cerion * We then execute our stack buffer.
107cfe949112586ed0423a6064ae91ad3046f282869cerion * All ppc instructions are 32bits wide, which makes this fairly easy.
108cfe949112586ed0423a6064ae91ad3046f282869cerion *
109cfe949112586ed0423a6064ae91ad3046f282869cerion * Example:
110cfe949112586ed0423a6064ae91ad3046f282869cerion * extern void test_addi (void);
11152675269f43c06380b04bf502c509cca4ee643b6cerion * asm(".section \".text\"\n"
11252675269f43c06380b04bf502c509cca4ee643b6cerion *     "    .align 2\n"
11352675269f43c06380b04bf502c509cca4ee643b6cerion *     "    .type test_addi,@function\n"
11452675269f43c06380b04bf502c509cca4ee643b6cerion *     "test_addi:\n"
11552675269f43c06380b04bf502c509cca4ee643b6cerion *     "    addi\n"
11652675269f43c06380b04bf502c509cca4ee643b6cerion *     "    blr\n"
11752675269f43c06380b04bf502c509cca4ee643b6cerion *     "    .previous\n"
11852675269f43c06380b04bf502c509cca4ee643b6cerion *     );
119cfe949112586ed0423a6064ae91ad3046f282869cerion *
120cfe949112586ed0423a6064ae91ad3046f282869cerion * We are interested only in:
12152675269f43c06380b04bf502c509cca4ee643b6cerion *      "    addi         17, 14, 0\n"
12252675269f43c06380b04bf502c509cca4ee643b6cerion *      "    blr\n"
123cfe949112586ed0423a6064ae91ad3046f282869cerion *
124cfe949112586ed0423a6064ae91ad3046f282869cerion * In a loop test, we may see:
125cfe949112586ed0423a6064ae91ad3046f282869cerion * uint32_t func_buf[2];               // our new stack based 'function'
126cfe949112586ed0423a6064ae91ad3046f282869cerion * for imm...                          // loop over imm
12752675269f43c06380b04bf502c509cca4ee643b6cerion *   init_function( &func, func_buf );   // copy insns, set func ptr
12852675269f43c06380b04bf502c509cca4ee643b6cerion *   patch_op_imm16(&func_buf[0], imm);  // patch 'addi' insn
12952675269f43c06380b04bf502c509cca4ee643b6cerion *   ...
13052675269f43c06380b04bf502c509cca4ee643b6cerion *   (*func)();                              // exec our rewritten code
131cfe949112586ed0423a6064ae91ad3046f282869cerion *
132cfe949112586ed0423a6064ae91ad3046f282869cerion * patch_op_imm16() itself simply takes the uint32_t insn and overwrites
133cfe949112586ed0423a6064ae91ad3046f282869cerion * the immediate field with the new value (which, for 'addi', is the
134cfe949112586ed0423a6064ae91ad3046f282869cerion * low 16 bits).
135cfe949112586ed0423a6064ae91ad3046f282869cerion *
136cfe949112586ed0423a6064ae91ad3046f282869cerion * So in the loop test, if 'imm' is currently 9, and p[0] is:
137cfe949112586ed0423a6064ae91ad3046f282869cerion *   0x3A2E0000   => addi 17, 14, 0
138cfe949112586ed0423a6064ae91ad3046f282869cerion *
139cfe949112586ed0423a6064ae91ad3046f282869cerion * after patch_op_imm16(), func_buf[0] becomes:
140cfe949112586ed0423a6064ae91ad3046f282869cerion *   0x3A2E0009   => addi 17, 14, 9
14152675269f43c06380b04bf502c509cca4ee643b6cerion *
14252675269f43c06380b04bf502c509cca4ee643b6cerion * Note: init_function() needs to be called on every iteration
14352675269f43c06380b04bf502c509cca4ee643b6cerion *  - don't ask me why!
144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
146586fb038935723146cb6950b38911aeb9fc12765cerion
147586fb038935723146cb6950b38911aeb9fc12765cerion/**********************************************************************/
148586fb038935723146cb6950b38911aeb9fc12765cerion/* Uncomment to enable many arguments for altivec insns */
149586fb038935723146cb6950b38911aeb9fc12765cerion#define USAGE_SIMPLE
150586fb038935723146cb6950b38911aeb9fc12765cerion
151586fb038935723146cb6950b38911aeb9fc12765cerion/* Uncomment to enable many arguments for altivec insns */
152586fb038935723146cb6950b38911aeb9fc12765cerion//#define ALTIVEC_ARGS_LARGE
153586fb038935723146cb6950b38911aeb9fc12765cerion
154586fb038935723146cb6950b38911aeb9fc12765cerion/* Uncomment to enable output of CR flags for float tests */
155586fb038935723146cb6950b38911aeb9fc12765cerion//#define TEST_FLOAT_FLAGS
156586fb038935723146cb6950b38911aeb9fc12765cerion
157586fb038935723146cb6950b38911aeb9fc12765cerion/* Uncomment to enable debug output */
158586fb038935723146cb6950b38911aeb9fc12765cerion//#define DEBUG_ARGS_BUILD
159586fb038935723146cb6950b38911aeb9fc12765cerion//#define DEBUG_FILTER
160586fb038935723146cb6950b38911aeb9fc12765cerion
161586fb038935723146cb6950b38911aeb9fc12765cerion/* These should be set at build time */
162586fb038935723146cb6950b38911aeb9fc12765cerion//#define NO_FLOAT
163f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj//#define HAS_ALTIVEC  // CFLAGS += -maltivec
164586fb038935723146cb6950b38911aeb9fc12765cerion//#define IS_PPC405
165586fb038935723146cb6950b38911aeb9fc12765cerion/**********************************************************************/
166586fb038935723146cb6950b38911aeb9fc12765cerion
167586fb038935723146cb6950b38911aeb9fc12765cerion
168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdint.h>
16983b62cbbab29bde83eba40231f307c2a311e73c8njn#include "tests/sys_mman.h"
1706467a15a56f58e1007dc9cf26bee3de17606417bsewardj#include "tests/malloc.h"       // memalign16
17152675269f43c06380b04bf502c509cca4ee643b6cerion
172e4f74838b9b2bbaaaca08117214194ec368caf95bart#define STATIC_ASSERT(e) sizeof(struct { int:-!(e); })
173e4f74838b9b2bbaaaca08117214194ec368caf95bart
17452675269f43c06380b04bf502c509cca4ee643b6cerion/* Something of the same size as void*, so can be safely be coerced
175482d35c0fad2f5452db44154f3740838f49e4c76bart * to/from a pointer type. Also same size as the host's gp registers.
176482d35c0fad2f5452db44154f3740838f49e4c76bart * According to the AltiVec section of the GCC manual, the syntax does
177482d35c0fad2f5452db44154f3740838f49e4c76bart * not allow the use of a typedef name as a type specifier in conjunction
178482d35c0fad2f5452db44154f3740838f49e4c76bart * with the vector keyword, so typedefs uint[32|64]_t are #undef'ed here
179482d35c0fad2f5452db44154f3740838f49e4c76bart * and redefined using #define.
180482d35c0fad2f5452db44154f3740838f49e4c76bart */
181482d35c0fad2f5452db44154f3740838f49e4c76bart#undef uint32_t
182e4f74838b9b2bbaaaca08117214194ec368caf95bart#undef uint64_t
183482d35c0fad2f5452db44154f3740838f49e4c76bart#define uint32_t unsigned int
1842762a738523d6f37cab30c4b1fae6a30414a81f6sewardj#define uint64_t unsigned long long int
185e4f74838b9b2bbaaaca08117214194ec368caf95bart
186e4f74838b9b2bbaaaca08117214194ec368caf95bart#ifndef __powerpc64__
187e4f74838b9b2bbaaaca08117214194ec368caf95barttypedef uint32_t  HWord_t;
188e4f74838b9b2bbaaaca08117214194ec368caf95bart#else
189a2a583876ee4197d0284960aeb594dc75bce2f09ceriontypedef uint64_t  HWord_t;
190e4f74838b9b2bbaaaca08117214194ec368caf95bart#endif /* __powerpc64__ */
19152675269f43c06380b04bf502c509cca4ee643b6cerion
192e4f74838b9b2bbaaaca08117214194ec368caf95bartenum {
193e4f74838b9b2bbaaaca08117214194ec368caf95bart    compile_time_test1 = STATIC_ASSERT(sizeof(uint32_t) == 4),
194e4f74838b9b2bbaaaca08117214194ec368caf95bart    compile_time_test2 = STATIC_ASSERT(sizeof(uint64_t) == 8),
195e4f74838b9b2bbaaaca08117214194ec368caf95bart};
19652675269f43c06380b04bf502c509cca4ee643b6cerion
1975f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define ALLCR "cr0","cr1","cr2","cr3","cr4","cr5","cr6","cr7"
1985f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
1995f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_CR(_arg) \
2005f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      __asm__ __volatile__ ("mtcr  %0" : : "b"(_arg) : ALLCR );
2015f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2025f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_XER(_arg) \
2035f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      __asm__ __volatile__ ("mtxer %0" : : "b"(_arg) : "xer" );
2045f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2055f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define GET_CR(_lval) \
2065f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      __asm__ __volatile__ ("mfcr %0"  : "=b"(_lval) )
2075f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2085f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define GET_XER(_lval) \
2095f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      __asm__ __volatile__ ("mfxer %0" : "=b"(_lval) )
2105f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2115f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define GET_CR_XER(_lval_cr,_lval_xer) \
2125f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   do { GET_CR(_lval_cr); GET_XER(_lval_xer); } while (0)
2135f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2145f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_CR_ZERO \
2155f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR(0)
2165f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2175f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_XER_ZERO \
2185f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_XER(0)
2195f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2205f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_CR_XER_ZERO \
2215f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   do { SET_CR_ZERO; SET_XER_ZERO; } while (0)
2225f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2235f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_FPSCR_ZERO \
2245f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   do { double _d = 0.0; \
2255f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj        __asm__ __volatile__ ("mtfsf 0xFF, %0" : : "f"(_d) ); \
2265f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   } while (0)
2275f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2285f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2295f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj/* XXXX these must all be callee-save regs! */
2300e342a0c84f17f2e5ca3e244db36dba074fdd5d0sewardjregister double f14 __asm__ ("fr14");
2310e342a0c84f17f2e5ca3e244db36dba074fdd5d0sewardjregister double f15 __asm__ ("fr15");
2320e342a0c84f17f2e5ca3e244db36dba074fdd5d0sewardjregister double f16 __asm__ ("fr16");
2330e342a0c84f17f2e5ca3e244db36dba074fdd5d0sewardjregister double f17 __asm__ ("fr17");
23452675269f43c06380b04bf502c509cca4ee643b6cerionregister HWord_t r14 __asm__ ("r14");
23552675269f43c06380b04bf502c509cca4ee643b6cerionregister HWord_t r15 __asm__ ("r15");
23652675269f43c06380b04bf502c509cca4ee643b6cerionregister HWord_t r16 __asm__ ("r16");
23752675269f43c06380b04bf502c509cca4ee643b6cerionregister HWord_t r17 __asm__ ("r17");
238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
239f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#include "config.h"         // HAS_ALTIVEC
240f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#   include <altivec.h>
242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <assert.h>
244b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#include <ctype.h>     // isspace
245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdio.h>
246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdlib.h>
247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <string.h>
248b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#include <unistd.h>    // getopt
2498a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
25052675269f43c06380b04bf502c509cca4ee643b6cerion
251a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
2528a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#define ASSEMBLY_FUNC(__fname, __insn)     \
2538a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionasm(".section \".text\"\n"                 \
2548a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    "\t.align 2\n"                         \
2558a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    "\t.type "__fname",@function\n"        \
2568a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    __fname":\n"                           \
2578a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    "\t"__insn"\n"                         \
2588a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    "\tblr\n"                              \
2598a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    "\t.previous\n"                        \
2608a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    )
261a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
262a2a583876ee4197d0284960aeb594dc75bce2f09cerion#define ASSEMBLY_FUNC(__fname, __insn)     \
263a2a583876ee4197d0284960aeb594dc75bce2f09cerionasm(".section  \".text\"\n"                \
264a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.align 2\n"                         \
265a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.global "__fname"\n"                \
266a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.section \".opd\",\"aw\"\n"         \
267a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.align 3\n"                         \
268a2a583876ee4197d0284960aeb594dc75bce2f09cerion    ""__fname":\n"                         \
269a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.quad ."__fname",.TOC.@tocbase,0\n" \
270a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.previous\n"                        \
271a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.type ."__fname",@function\n"       \
272a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.global  ."__fname"\n"              \
273a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "."__fname":\n"                        \
274a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t"__insn"\n"                         \
275a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\tblr\n"                              \
276a2a583876ee4197d0284960aeb594dc75bce2f09cerion    )
277a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifndef __powerpc64__
2788a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
2798a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
2807c01859c190613f313f57fc4b1c6bb14124b00c7sewardj/* Return a pointer to a 1-page area where is is safe to both write
2817c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   and execute instructions.  Area is filled with 'trap' insns. */
2827c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic
2837c01859c190613f313f57fc4b1c6bb14124b00c7sewardjuint32_t* get_rwx_area ( void )
2847c01859c190613f313f57fc4b1c6bb14124b00c7sewardj{
2857c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   int i;
2867c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   static uint32_t* p = NULL;
2877c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   if (p == NULL) {
2887c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      p = mmap(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
2897c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                           MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
2907c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      assert(p != MAP_FAILED);
2917c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   }
2927c01859c190613f313f57fc4b1c6bb14124b00c7sewardj
2937c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   for (i = 0; i < 4096/sizeof(uint32_t); i++)
2947c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      p[i] = 0x7fe00008; /* trap */
2957c01859c190613f313f57fc4b1c6bb14124b00c7sewardj
2967c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   return p;
2977c01859c190613f313f57fc4b1c6bb14124b00c7sewardj}
2987c01859c190613f313f57fc4b1c6bb14124b00c7sewardj
299b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- BEGIN #include "test-ppc.h" -------------- */
301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/*
302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * test-ppc.h:
303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * PPC tests for qemu-PPC CPU emulation checks - definitions
304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Copyright (c) 2005 Jocelyn Mayer
306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   This program is free software; you can redistribute it and/or
308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   modify it under the terms of the GNU General Public License V2
309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   as published by the Free Software Foundation
310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   This program is distributed in the hope that it will be useful,
312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   but WITHOUT ANY WARRANTY; without even the implied warranty of
313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   GNU General Public License for more details.
315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   You should have received a copy of the GNU General Public License
317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   along with this program; if not, write to the Free Software
318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (__TEST_PPC_H__)
322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define __TEST_PPC_H__
323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdint.h>
325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef void (*test_func_t) (void);
327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct test_t test_t;
328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct test_table_t test_table_t;
329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct test_t {
330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    test_func_t func;
331530f73578552bc876a51fbf90cb6be29769bb362sewardj    const char *name;
332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct test_table_t {
335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    test_t *tests;
336530f73578552bc876a51fbf90cb6be29769bb362sewardj    const char *name;
337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    uint32_t flags;
338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
340530f73578552bc876a51fbf90cb6be29769bb362sewardjtypedef void (*test_loop_t) (const char *name, test_func_t func,
341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                             uint32_t flags);
342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjenum test_flags {
344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Nb arguments */
345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ONE_ARG    = 0x00000001,
346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_TWO_ARGS   = 0x00000002,
347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_THREE_ARGS = 0x00000003,
348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CMP_ARGS   = 0x00000004,  // family: compare
349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CMPI_ARGS  = 0x00000005,  // family: compare
350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_TWO_I16    = 0x00000006,  // family: arith/logical
351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_SPECIAL    = 0x00000007,  // family: logical
352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LD_ARGS    = 0x00000008,  // family: ldst
353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LDX_ARGS   = 0x00000009,  // family: ldst
354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ST_ARGS    = 0x0000000A,  // family: ldst
355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_STX_ARGS   = 0x0000000B,  // family: ldst
356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_NB_ARGS    = 0x0000000F,
357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Type */
358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ARITH      = 0x00000100,
359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LOGICAL    = 0x00000200,
360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_COMPARE    = 0x00000300,
361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CROP       = 0x00000400,
362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LDST       = 0x00000500,
363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_TYPE       = 0x00000F00,
364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Family */
365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_INTEGER    = 0x00010000,
366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_FLOAT      = 0x00020000,
367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_405        = 0x00030000,
368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ALTIVEC    = 0x00040000,
369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_FALTIVEC   = 0x00050000,
370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_FAMILY     = 0x000F0000,
371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Flags: these may be combined, so use separate bitfields. */
372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CR         = 0x01000000,
373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_XER_CA     = 0x02000000,
374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (__TEST_PPC_H__) */
377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- END #include "test-ppc.h" -------------- */
379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (DEBUG_ARGS_BUILD)
384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define AB_DPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0)
385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define AB_DPRINTF(fmt, args...) do { } while (0)
387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (DEBUG_FILTER)
390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define FDPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0)
391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define FDPRINTF(fmt, args...) do { } while (0)
393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3958a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
396c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion/* Produce the 64-bit pattern corresponding to the supplied double. */
397c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic uint64_t double_to_bits ( double d )
398c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
399c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   union { uint64_t i; double d; } u;
400c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(8 == sizeof(uint64_t));
401c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(8 == sizeof(double));
402c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(8 == sizeof(u));
403c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   u.d = d;
404c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   return u.i;
405c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
406c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
407c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if 0
408c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic float bits_to_float ( uint32_t i )
409c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
410c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   union { uint32_t i; float f; } u;
411c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(4 == sizeof(uint32_t));
412c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(4 == sizeof(float));
413c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(4 == sizeof(u));
414c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   u.i = i;
415c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   return u.f;
416c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
417c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif
418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4198a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
420f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4218a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionstatic void AB_DPRINTF_VEC32x4 ( vector unsigned int v )
4228a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion{
4238a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#if defined (DEBUG_ARGS_BUILD)
4248a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   int i;
4258a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   unsigned int* p_int = (unsigned int*)&v;
4268a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   AB_DPRINTF("val");
4278a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   for (i=0; i<4; i++) {
4288a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion      AB_DPRINTF(" %08x", p_int[i]);
4298a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   }
4308a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   AB_DPRINTF("\n");
4318a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#endif
4328a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion}
4338a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#endif
4348a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
4358a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define unused __attribute__ (( unused ))
437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4388a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- BEGIN #include "ops-ppc.c" -------------- */
440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* #include "test-ppc.h" */
442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_add (void)
444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("add          17, 14, 15");
446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addo (void)
449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addo         17, 14, 15");
451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addc (void)
454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addc         17, 14, 15");
456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addco (void)
459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addco        17, 14, 15");
461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divw (void)
464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divw         17, 14, 15");
466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwo (void)
469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwo        17, 14, 15");
471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwu (void)
474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwu        17, 14, 15");
476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwuo (void)
479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwuo       17, 14, 15");
481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhw (void)
484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhw        17, 14, 15");
486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhwu (void)
489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhwu       17, 14, 15");
491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullw (void)
494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullw        17, 14, 15");
496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullwo (void)
499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullwo       17, 14, 15");
501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subf (void)
504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subf         17, 14, 15");
506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfo (void)
509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfo        17, 14, 15");
511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfc (void)
514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfc        17, 14, 15");
516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfco (void)
519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfco       17, 14, 15");
521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
523a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
524a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulld (void)
525a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
526a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulld        17, 14, 15");
527a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
528a2a583876ee4197d0284960aeb594dc75bce2f09cerion
529a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulhd (void)
530a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
531a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulhd        17, 14, 15");
532a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
533a2a583876ee4197d0284960aeb594dc75bce2f09cerion
534a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulhdu (void)
535a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
536a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulhdu       17, 14, 15");
537a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
538a2a583876ee4197d0284960aeb594dc75bce2f09cerion
539a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_divd (void)
540a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
541a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("divd         17, 14, 15");
542a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
543a2a583876ee4197d0284960aeb594dc75bce2f09cerion
544a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_divdu (void)
545a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
546a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("divdu        17, 14, 15");
547a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
548a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
549a2a583876ee4197d0284960aeb594dc75bce2f09cerion
550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ia_ops_two[] = {
551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_add             , "         add", },
552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addo            , "        addo", },
553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addc            , "        addc", },
554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addco           , "       addco", },
555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divw            , "        divw", },
556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwo           , "       divwo", },
557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwu           , "       divwu", },
558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwuo          , "      divwuo", },
559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhw           , "       mulhw", },
560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhwu          , "      mulhwu", },
561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullw           , "       mullw", },
562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullwo          , "      mullwo", },
563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subf            , "        subf", },
564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfo           , "       subfo", },
565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfc           , "       subfc", },
566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfco          , "      subfco", },
567a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
568a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulhd           , "       mulhd", },
569a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulhdu          , "      mulhdu", },
570a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulld           , "       mulld", },
571a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_divd            , "        divd", },
572a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_divdu           , "       divdu", },
573a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_add_ (void)
578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("add.         17, 14, 15");
580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addo_ (void)
583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addo.        17, 14, 15");
585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addc_ (void)
588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addc.        17, 14, 15");
590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addco_ (void)
593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addco.       17, 14, 15");
595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divw_ (void)
598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divw.        17, 14, 15");
600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwo_ (void)
603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwo.       17, 14, 15");
605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwu_ (void)
608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwu.       17, 14, 15");
610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwuo_ (void)
613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwuo.      17, 14, 15");
615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhw_ (void)
618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhw.       17, 14, 15");
620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhwu_ (void)
623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhwu.      17, 14, 15");
625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullw_ (void)
628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullw.       17, 14, 15");
630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullwo_ (void)
633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullwo.      17, 14, 15");
635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subf_ (void)
638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subf.        17, 14, 15");
640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfo_ (void)
643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfo.       17, 14, 15");
645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfc_ (void)
648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfc.       17, 14, 15");
650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfco_ (void)
653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfco.      17, 14, 15");
655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
657a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
658a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulhd_ (void)
659a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
660a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulhd.       17, 14, 15");
661a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
662a2a583876ee4197d0284960aeb594dc75bce2f09cerion
663a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulhdu_ (void)
664a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
665a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulhdu.      17, 14, 15");
666a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
667a2a583876ee4197d0284960aeb594dc75bce2f09cerion
668a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulld_ (void)
669a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
670a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulld.       17, 14, 15");
671a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
672a2a583876ee4197d0284960aeb594dc75bce2f09cerion
673a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_divd_ (void)
674a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
675a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("divd.        17, 14, 15");
676a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
677a2a583876ee4197d0284960aeb594dc75bce2f09cerion
678a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_divdu_ (void)
679a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
680a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("divdu.       17, 14, 15");
681a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
682a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
683a2a583876ee4197d0284960aeb594dc75bce2f09cerion
684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iar_ops_two[] = {
685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_add_            , "        add.", },
686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addo_           , "       addo.", },
687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addc_           , "       addc.", },
688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addco_          , "      addco.", },
689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divw_           , "       divw.", },
690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwo_          , "      divwo.", },
691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwu_          , "      divwu.", },
692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwuo_         , "     divwuo.", },
693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhw_          , "      mulhw.", },
694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhwu_         , "     mulhwu.", },
695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullw_          , "      mullw.", },
696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullwo_         , "     mullwo.", },
697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subf_           , "       subf.", },
698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfo_          , "      subfo.", },
699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfc_          , "      subfc.", },
700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfco_         , "     subfco.", },
701a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
702a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulhd_          , "      mulhd.", },
703a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulhdu_         , "     mulhdu.", },
704a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulld_          , "      mulld.", },
705a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_divd_           , "       divd.", },
706a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_divdu_          , "      divdu.", },
707a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_adde (void)
712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("adde         17, 14, 15");
714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addeo (void)
717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addeo        17, 14, 15");
719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfe (void)
722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfe        17, 14, 15");
724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfeo (void)
727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfeo       17, 14, 15");
729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iac_ops_two[] = {
732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_adde            , "        adde", },
733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addeo           , "       addeo", },
734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfe           , "       subfe", },
735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfeo          , "      subfeo", },
736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_adde_ (void)
740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("adde.        17, 14, 15");
742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addeo_ (void)
745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addeo.       17, 14, 15");
747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfe_ (void)
750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfe.       17, 14, 15");
752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfeo_ (void)
755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfeo.      17, 14, 15");
757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iacr_ops_two[] = {
760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_adde_           , "       adde.", },
761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addeo_          , "      addeo.", },
762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfe_          , "      subfe.", },
763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfeo_         , "     subfeo.", },
764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_and (void)
768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("and          17, 14, 15");
770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andc (void)
773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("andc         17, 14, 15");
775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_eqv (void)
778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("eqv          17, 14, 15");
780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nand (void)
783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nand         17, 14, 15");
785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nor (void)
788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nor          17, 14, 15");
790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_or (void)
793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("or           17, 14, 15");
795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_orc (void)
798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("orc          17, 14, 15");
800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xor (void)
803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("xor          17, 14, 15");
805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_slw (void)
808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("slw          17, 14, 15");
810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sraw (void)
813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sraw         17, 14, 15");
815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srw (void)
818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("srw          17, 14, 15");
820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
822a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
823a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_sld (void)
824a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
825a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("sld          17, 14, 15");
826a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
827a2a583876ee4197d0284960aeb594dc75bce2f09cerion
828a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_srad (void)
829a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
830a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("srad         17, 14, 15");
831a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
832a2a583876ee4197d0284960aeb594dc75bce2f09cerion
833a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_srd (void)
834a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
835a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("srd          17, 14, 15");
836a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
837a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
838a2a583876ee4197d0284960aeb594dc75bce2f09cerion
839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_two[] = {
840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_and             , "         and", },
841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andc            , "        andc", },
842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_eqv             , "         eqv", },
843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nand            , "        nand", },
844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nor             , "         nor", },
845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_or              , "          or", },
846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_orc             , "         orc", },
847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xor             , "         xor", },
848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_slw             , "         slw", },
849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sraw            , "        sraw", },
850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srw             , "         srw", },
851a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
852a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_sld             , "         sld", },
853a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_srad            , "        srad", },
854a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_srd             , "         srd", },
855a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_and_ (void)
860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("and.         17, 14, 15");
862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andc_ (void)
865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("andc.        17, 14, 15");
867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_eqv_ (void)
870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("eqv.         17, 14, 15");
872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nand_ (void)
875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nand.        17, 14, 15");
877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nor_ (void)
880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nor.         17, 14, 15");
882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_or_ (void)
885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("or.          17, 14, 15");
887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_orc_ (void)
890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("orc.         17, 14, 15");
892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xor_ (void)
895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("xor.         17, 14, 15");
897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_slw_ (void)
900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("slw.         17, 14, 15");
902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sraw_ (void)
905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sraw.        17, 14, 15");
907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srw_ (void)
910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("srw.         17, 14, 15");
912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
914a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
915a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_sld_ (void)
916a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
917a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("sld.         17, 14, 15");
918a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
919a2a583876ee4197d0284960aeb594dc75bce2f09cerion
920a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_srad_ (void)
921a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
922a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("srad.        17, 14, 15");
923a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
924a2a583876ee4197d0284960aeb594dc75bce2f09cerion
925a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_srd_ (void)
926a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
927a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("srd.         17, 14, 15");
928a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
929a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
930a2a583876ee4197d0284960aeb594dc75bce2f09cerion
931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_two[] = {
932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_and_            , "        and.", },
933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andc_           , "       andc.", },
934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_eqv_            , "        eqv.", },
935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nand_           , "       nand.", },
936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nor_            , "        nor.", },
937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_or_             , "         or.", },
938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_orc_            , "        orc.", },
939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xor_            , "        xor.", },
940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_slw_            , "        slw.", },
941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sraw_           , "       sraw.", },
942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srw_            , "        srw.", },
943a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
944a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_sld_            , "        sld.", },
945a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_srad_           , "       srad.", },
946a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_srd_            , "        srd.", },
947a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
9518a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionstatic void test_cmpw (void)
952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
9538a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    __asm__ __volatile__ ("cmpw         2, 14, 15");
954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
9568a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionstatic void test_cmplw (void)
957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
9588a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    __asm__ __volatile__ ("cmplw        2, 14, 15");
959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
961a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
962a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_cmpd (void)
963a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
964a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("cmpd         2, 14, 15");
965a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
966a2a583876ee4197d0284960aeb594dc75bce2f09cerion
967a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_cmpld (void)
968a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
969a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("cmpld        2, 14, 15");
970a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
971a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
972a2a583876ee4197d0284960aeb594dc75bce2f09cerion
973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_icr_ops_two[] = {
9748a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    { &test_cmpw            , "        cmpw", },
9758a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    { &test_cmplw           , "       cmplw", },
976a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
977a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cmpd            , "        cmpd", },
978a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cmpld           , "       cmpld", },
979a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
9838a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionextern void test_cmpwi (void);
9848a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_cmpwi", "cmpwi         2, 14, 0");
9858a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
9868a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionextern void test_cmplwi (void);
9878a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_cmplwi", "cmplwi        2, 14, 0");
988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
989a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
990a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_cmpdi (void);
991a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_cmpdi", "cmpdi        2, 14, 0");
992a2a583876ee4197d0284960aeb594dc75bce2f09cerion
993a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_cmpldi (void);
994a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_cmpldi", "cmpldi       2, 14, 0");
995a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
996a2a583876ee4197d0284960aeb594dc75bce2f09cerion
997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_icr_ops_two_i16[] = {
9988a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    { &test_cmpwi           , "       cmpwi", },
9998a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    { &test_cmplwi          , "      cmplwi", },
1000a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1001a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cmpdi           , "       cmpdi", },
1002a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cmpldi          , "      cmpldi", },
1003a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
100757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addi (void);
10088a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addi", "addi         17, 14, 0");
100957778621b9d85c82fcb5185ba146add1715c5432sewardj
101057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addic (void);
10118a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addic", "addic        17, 14, 0");
101257778621b9d85c82fcb5185ba146add1715c5432sewardj
101357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addis (void);
10148a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addis", "addis        17, 14, 0");
101557778621b9d85c82fcb5185ba146add1715c5432sewardj
101657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mulli (void);
10178a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mulli", "mulli        17, 14, 0");
101857778621b9d85c82fcb5185ba146add1715c5432sewardj
101957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_subfic (void);
10208a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_subfic", "subfic       17, 14, 0");
1021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ia_ops_two_i16[] = {
1023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addi            , "        addi", },
1024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addic           , "       addic", },
1025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addis           , "       addis", },
1026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulli           , "       mulli", },
1027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfic          , "      subfic", },
1028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
103157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addic_ (void);
10328a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addic_", "addic.       17, 14, 0");
1033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iar_ops_two_i16[] = {
1035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addic_          , "      addic.", },
1036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
103957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_ori (void);
10408a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_ori", "ori       17, 14, 0");
104157778621b9d85c82fcb5185ba146add1715c5432sewardj
104257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_oris (void);
10438a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_oris", "oris       17, 14, 0");
104457778621b9d85c82fcb5185ba146add1715c5432sewardj
104557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_xori (void);
10468a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_xori", "xori       17, 14, 0");
104757778621b9d85c82fcb5185ba146add1715c5432sewardj
104857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_xoris (void);
10498a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_xoris", "xoris       17, 14, 0");
1050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_two_i16[] = {
1052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_ori             , "         ori", },
1053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_oris            , "        oris", },
1054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xori            , "        xori", },
1055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xoris           , "       xoris", },
1056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
105957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_andi_ (void);
10608a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_andi_", "andi.       17, 14, 0");
106157778621b9d85c82fcb5185ba146add1715c5432sewardj
106257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_andis_ (void);
10638a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_andis_", "andis.      17, 14, 0");
1064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_two_i16[] = {
1066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andi_           , "       andi.", },
1067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andis_          , "      andis.", },
1068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crand (void)
1072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crand        17, 14, 15");
1074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crandc (void)
1077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crandc       17, 14, 15");
1079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_creqv (void)
1082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("creqv        17, 14, 15");
1084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crnand (void)
1087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crnand       17, 14, 15");
1089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crnor (void)
1092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crnor        17, 14, 15");
1094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cror (void)
1097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cror         17, 14, 15");
1099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crorc (void)
1102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crorc        17, 14, 15");
1104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crxor (void)
1107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crxor        17, 14, 15");
1109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_crl_ops_two[] = {
1112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crand           , "       crand", },
1113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crandc          , "      crandc", },
1114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_creqv           , "       creqv", },
1115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crnand          , "      crnand", },
1116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crnor           , "       crnor", },
1117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cror            , "        cror", },
1118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crorc           , "       crorc", },
1119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crxor           , "       crxor", },
1120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addme (void)
1124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addme        17, 14");
1126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addmeo (void)
1129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addmeo       17, 14");
1131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addze (void)
1134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addze        17, 14");
1136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addzeo (void)
1139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addzeo       17, 14");
1141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfme (void)
1144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfme       17, 14");
1146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfmeo (void)
1149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfmeo      17, 14");
1151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfze (void)
1154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfze       17, 14");
1156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfzeo (void)
1159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfzeo      17, 14");
1161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iac_ops_one[] = {
1164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addme           , "       addme", },
1165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addmeo          , "      addmeo", },
1166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addze           , "       addze", },
1167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addzeo          , "      addzeo", },
1168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfme          , "      subfme", },
1169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfmeo         , "     subfmeo", },
1170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfze          , "      subfze", },
1171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfzeo         , "     subfzeo", },
1172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addme_ (void)
1176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addme.       17, 14");
1178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addmeo_ (void)
1181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addmeo.      17, 14");
1183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addze_ (void)
1186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addze.       17, 14");
1188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addzeo_ (void)
1191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addzeo.      17, 14");
1193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfme_ (void)
1196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfme.      17, 14");
1198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfmeo_ (void)
1201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfmeo.     17, 14");
1203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfze_ (void)
1206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfze.      17, 14");
1208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfzeo_ (void)
1211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfzeo.     17, 14");
1213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iacr_ops_one[] = {
1216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addme_          , "      addme.", },
1217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addmeo_         , "     addmeo.", },
1218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addze_          , "      addze.", },
1219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addzeo_         , "     addzeo.", },
1220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfme_         , "     subfme.", },
1221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfmeo_        , "    subfmeo.", },
1222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfze_         , "     subfze.", },
1223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfzeo_        , "    subfzeo.", },
1224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cntlzw (void)
1228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cntlzw       17, 14");
1230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsb (void)
1233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsb        17, 14");
1235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsh (void)
1238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsh        17, 14");
1240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_neg (void)
1243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("neg          17, 14");
1245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nego (void)
1248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nego         17, 14");
1250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1252a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1253a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_cntlzd (void)
1254a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1255a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("cntlzd       17, 14");
1256a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1257a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1258a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_extsw (void)
1259a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1260a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("extsw        17, 14");
1261a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1262a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1263a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_one[] = {
1265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cntlzw          , "      cntlzw", },
1266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsb           , "       extsb", },
1267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsh           , "       extsh", },
1268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_neg             , "         neg", },
1269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nego            , "        nego", },
1270a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1271a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cntlzd          , "      cntlzd", },
1272a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_extsw           , "       extsw", },
1273a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cntlzw_ (void)
1278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cntlzw.      17, 14");
1280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsb_ (void)
1283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsb.       17, 14");
1285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsh_ (void)
1288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsh.       17, 14");
1290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_neg_ (void)
1293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("neg.         17, 14");
1295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nego_ (void)
1298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nego.        17, 14");
1300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1302a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1303a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_cntlzd_ (void)
1304a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1305a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("cntlzd.      17, 14");
1306a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1307a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1308a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_extsw_ (void)
1309a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1310a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("extsw.       17, 14");
1311a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1312a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1313a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_one[] = {
1315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cntlzw_         , "     cntlzw.", },
1316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsb_          , "      extsb.", },
1317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsh_          , "      extsh.", },
1318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_neg_            , "        neg.", },
1319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nego_           , "       nego.", },
1320a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1321a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cntlzd_         , "     cntlzd.", },
1322a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_extsw_          , "      extsw.", },
1323a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
132757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwimi (void);
13288a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwimi", "rlwimi      17, 14, 0, 0, 0");
132957778621b9d85c82fcb5185ba146add1715c5432sewardj
133057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwinm (void);
13318a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwinm", "rlwinm      17, 14, 0, 0, 0");
133257778621b9d85c82fcb5185ba146add1715c5432sewardj
133357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwnm (void);
13348a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwnm", "rlwnm      17, 14, 15, 0, 0");
133557778621b9d85c82fcb5185ba146add1715c5432sewardj
133657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_srawi (void);
13378a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_srawi", "srawi      17, 14, 0");
1338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mfcr (void)
1340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mfcr         17");
1342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mfspr (void)
1345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mfspr        17, 1");
1347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mtspr (void)
1350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mtspr        1, 14");
1352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1354a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1355a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldcl (void);
1356a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldcl", "rldcl       17, 14, 15, 0");
1357a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1358a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldcr (void);
1359a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldcr", "rldcr       17, 14, 15, 0");
1360a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1361a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldic (void);
1362a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldic", "rldic       17, 14, 0, 0");
1363a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1364a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldicl (void);
1365a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldicl", "rldicl      17, 14, 0, 0");
1366a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1367a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldicr (void);
1368a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldicr", "rldicr      17, 14, 0, 0");
1369a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1370a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldimi (void);
1371a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldimi", "rldimi      17, 14, 0, 0");
1372a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1373a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_sradi (void);
1374a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_sradi", "sradi      17, 14, 0");
1375a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1376a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_spe[] = {
1378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwimi          , "      rlwimi", },
1379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwinm          , "      rlwinm", },
1380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwnm           , "       rlwnm", },
1381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srawi           , "       srawi", },
1382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mfcr            , "        mfcr", },
1383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mfspr           , "       mfspr", },
1384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mtspr           , "       mtspr", },
1385a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1386a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldcl           , "       rldcl", },
1387a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldcr           , "       rldcr", },
1388a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldic           , "       rldic", },
1389a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldicl          , "      rldicl", },
1390a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldicr          , "      rldicr", },
1391a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldimi          , "      rldimi", },
1392a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_sradi           , "       sradi", },
1393a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
139757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwimi_ (void);
13988a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwimi_", "rlwimi.      17, 14, 0, 0, 0");
139957778621b9d85c82fcb5185ba146add1715c5432sewardj
140057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwinm_ (void);
14018a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwinm_", "rlwinm.      17, 14, 0, 0, 0");
140257778621b9d85c82fcb5185ba146add1715c5432sewardj
140357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwnm_ (void);
14048a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwnm_", "rlwnm.      17, 14, 15, 0, 0");
140557778621b9d85c82fcb5185ba146add1715c5432sewardj
140657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_srawi_ (void);
14078a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_srawi_", "srawi.      17, 14, 0");
140857778621b9d85c82fcb5185ba146add1715c5432sewardj
140957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mcrf (void);
14108a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mcrf", "mcrf      0, 0");
141157778621b9d85c82fcb5185ba146add1715c5432sewardj
141257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mcrxr (void);
14138a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mcrxr", "mcrxr      0");
141457778621b9d85c82fcb5185ba146add1715c5432sewardj
141557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mtcrf (void);
14168a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mtcrf", "mtcrf      0, 14");
1417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1418a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1419a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldcl_ (void);
1420a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldcl_", "rldcl.      17, 14, 15, 0");
1421a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1422a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldcr_ (void);
1423a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldcr_", "rldcr.      17, 14, 15, 0");
1424a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1425a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldic_ (void);
1426a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldic_", "rldic.      17, 14, 0, 0");
1427a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1428a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldicl_ (void);
1429a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldicl_", "rldicl.     17, 14, 0, 0");
1430a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1431a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldicr_ (void);
1432a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldicr_", "rldicr.     17, 14, 0, 0");
1433a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1434a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldimi_ (void);
1435a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldimi_", "rldimi.     17, 14, 0, 0");
1436a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1437a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_sradi_ (void);
1438a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_sradi_", "sradi.      17, 14, 0");
1439a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1440a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_spe[] = {
1442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwimi_         , "     rlwimi.", },
1443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwinm_         , "     rlwinm.", },
1444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwnm_          , "      rlwnm.", },
1445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srawi_          , "      srawi.", },
1446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mcrf            , "        mcrf", },
1447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mcrxr           , "       mcrxr", },
1448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mtcrf           , "       mtcrf", },
1449a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1450a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldcl_          , "      rldcl.", },
1451a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldcr_          , "      rldcr.", },
1452a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldic_          , "      rldic.", },
1453a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldicl_         , "     rldicl.", },
1454a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldicr_         , "     rldicr.", },
1455a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldimi_         , "     rldimi.", },
1456a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_sradi_          , "      sradi.", },
1457a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
146157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lbz (void);
14628a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lbz", "lbz          17,0(14)");
146357778621b9d85c82fcb5185ba146add1715c5432sewardj
146457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lbzu (void);
14658a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lbzu", "lbzu          17,0(14)");
146657778621b9d85c82fcb5185ba146add1715c5432sewardj
146757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lha (void);
14688a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lha", "lha          17,0(14)");
146957778621b9d85c82fcb5185ba146add1715c5432sewardj
147057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lhau (void);
14718a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lhau", "lhau          17,0(14)");
147257778621b9d85c82fcb5185ba146add1715c5432sewardj
147357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lhz (void);
14748a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lhz", "lhz          17,0(14)");
147557778621b9d85c82fcb5185ba146add1715c5432sewardj
147657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lhzu (void);
14778a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lhzu", "lhzu         17,0(14)");
147857778621b9d85c82fcb5185ba146add1715c5432sewardj
147957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lwz (void);
14808a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lwz", "lwz          17,0(14)");
148157778621b9d85c82fcb5185ba146add1715c5432sewardj
148257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lwzu (void);
14838a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lwzu", "lwzu          17,0(14)");
1484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1485a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1486a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_ld (void);
1487a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_ld", "ld            17,0(14)");
1488a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1489a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_ldu (void);
1490a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_ldu", "ldu           17,0(14)");
1491a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1492a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_lwa (void);
1493a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_lwa", "lwa           17,0(14)");
1494a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1495a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ild_ops_two_i16[] = {
1497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbz             , "         lbz", },
1498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbzu            , "        lbzu", },
1499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lha             , "         lha", },
1500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhau            , "        lhau", },
1501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhz             , "         lhz", },
1502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhzu            , "        lhzu", },
1503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwz             , "         lwz", },
1504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwzu            , "        lwzu", },
1505a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1506a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_ld              , "          ld", },
1507a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_ldu             , "         ldu", },
1508a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_lwa             , "         lwa", },
1509a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzx (void)
1514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lbzx         17,14,15");
1516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzux (void)
1519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lbzux        17,14,15");
1521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhax (void)
1524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhax         17,14,15");
1526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhaux (void)
1529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhaux        17,14,15");
1531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzx (void)
1534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhzx         17,14,15");
1536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzux (void)
1539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhzux        17,14,15");
1541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzx (void)
1544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lwzx         17,14,15");
1546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzux (void)
1549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lwzux        17,14,15");
1551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1553a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1554a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_ldx (void)
1555a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1556a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("ldx         17,14,15");
1557a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1558a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1559a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_ldux (void)
1560a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1561a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("ldux        17,14,15");
1562a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1563a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1564a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_lwax (void)
1565a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1566a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("lwax        17,14,15");
1567a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1568a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1569a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_lwaux (void)
1570a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1571a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("lwaux        17,14,15");
1572a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1573a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1574a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ild_ops_two[] = {
1576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbzx            , "        lbzx", },
1577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbzux           , "       lbzux", },
1578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhax            , "        lhax", },
1579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhaux           , "       lhaux", },
1580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhzx            , "        lhzx", },
1581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhzux           , "       lhzux", },
1582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwzx            , "        lwzx", },
1583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwzux           , "       lwzux", },
1584a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1585a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_ldx             , "         ldx", },
1586a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_ldux            , "        ldux", },
1587a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_lwax            , "        lwax", },
1588a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_lwaux           , "       lwaux", },
1589a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
159357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stb (void);
15948a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stb", "stb          14,0(15)");
159557778621b9d85c82fcb5185ba146add1715c5432sewardj
159657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stbu (void);
15978a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stbu", "stbu          14,0(15)");
159857778621b9d85c82fcb5185ba146add1715c5432sewardj
159957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_sth (void);
16008a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_sth", "sth          14,0(15)");
160157778621b9d85c82fcb5185ba146add1715c5432sewardj
160257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_sthu (void);
16038a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_sthu", "sthu         14,0(15)");
160457778621b9d85c82fcb5185ba146add1715c5432sewardj
160557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stw (void);
16068a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stw", "stw          14,0(15)");
160757778621b9d85c82fcb5185ba146add1715c5432sewardj
160857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stwu (void);
16098a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stwu", "stwu          14,0(15)");
1610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1611a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1612a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_std (void);
1613a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_std", "std          14,0(15)");
1614a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1615a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_stdu (void);
1616a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_stdu", "stdu          14,0(15)");
1617a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1618a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ist_ops_three_i16[] = {
1620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stb             , "         stb", },
1621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stbu            , "        stbu", },
1622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sth             , "         sth", },
1623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sthu            , "        sthu", },
1624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stw             , "         stw", },
1625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stwu            , "        stwu", },
1626a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1627a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_std             , "         std", },
1628a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_stdu            , "        stdu", },
1629a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbx (void)
1634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stbx         14,15,16");
1636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbux (void)
1639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stbux        14,15,16");
1641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthx (void)
1644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sthx         14,15,16");
1646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthux (void)
1649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sthux        14,15,16");
1651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwx (void)
1654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stwx         14,15,16");
1656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwux (void)
1659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stwux        14,15,16");
1661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1663a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1664a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_stdx (void)
1665a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1666a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("stdx         14,15,16");
1667a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1668a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1669a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_stdux (void)
1670a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1671a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("stdux        14,15,16");
1672a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1673a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1674a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ist_ops_three[] = {
1676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stbx            , "        stbx", },
1677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stbux           , "       stbux", },
1678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sthx            , "        sthx", },
1679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sthux           , "       sthux", },
1680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stwx            , "        stwx", },
1681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stwux           , "       stwux", },
1682a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1683a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_stdx            , "        stdx", },
1684a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_stdux           , "       stdux", },
1685a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsel (void)
1691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsel         17, 14, 15, 16");
1693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadd (void)
1696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadd        17, 14, 15, 16");
1698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadds (void)
1701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadds       17, 14, 15, 16");
1703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsub (void)
1706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsub        17, 14, 15, 16");
1708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsubs (void)
1711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsubs       17, 14, 15, 16");
1713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadd (void)
1716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadd       17, 14, 15, 16");
1718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadds (void)
1721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadds      17, 14, 15, 16");
1723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsub (void)
1726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsub       17, 14, 15, 16");
1728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsubs (void)
1731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsubs      17, 14, 15, 16");
1733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_three[] = {
1736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsel            , "        fsel", },
1737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadd           , "       fmadd", },
1738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadds          , "      fmadds", },
1739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsub           , "       fmsub", },
1740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsubs          , "      fmsubs", },
1741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadd          , "      fnmadd", },
1742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadds         , "     fnmadds", },
1743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsub          , "      fnmsub", },
1744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsubs         , "     fnmsubs", },
1745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsel_ (void)
1751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsel.        17, 14, 15, 16");
1753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadd_ (void)
1756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadd.       17, 14, 15, 16");
1758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadds_ (void)
1761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadds.      17, 14, 15, 16");
1763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsub_ (void)
1766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsub.       17, 14, 15, 16");
1768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsubs_ (void)
1771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsubs.      17, 14, 15, 16");
1773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadd_ (void)
1776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadd.      17, 14, 15, 16");
1778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadds_ (void)
1781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadds.     17, 14, 15, 16");
1783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsub_ (void)
1786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsub.      17, 14, 15, 16");
1788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsubs_ (void)
1791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsubs.     17, 14, 15, 16");
1793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_three[] = {
1796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsel_           , "       fsel.", },
1797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadd_          , "      fmadd.", },
1798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadds_         , "     fmadds.", },
1799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsub_          , "      fmsub.", },
1800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsubs_         , "     fmsubs.", },
1801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadd_         , "     fnmadd.", },
1802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadds_        , "    fnmadds.", },
1803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsub_         , "     fnmsub.", },
1804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsubs_        , "    fnmsubs.", },
1805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadd (void)
1811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadd         17, 14, 15");
1813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadds (void)
1816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadds        17, 14, 15");
1818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsub (void)
1821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsub         17, 14, 15");
1823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsubs (void)
1826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsubs        17, 14, 15");
1828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmul (void)
1831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmul         17, 14, 15");
1833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmuls (void)
1836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmuls        17, 14, 15");
1838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdiv (void)
1841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdiv         17, 14, 15");
1843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdivs (void)
1846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdivs        17, 14, 15");
1848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_two[] = {
1851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadd            , "        fadd", },
1852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadds           , "       fadds", },
1853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsub            , "        fsub", },
1854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsubs           , "       fsubs", },
1855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmul            , "        fmul", },
1856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmuls           , "       fmuls", },
1857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdiv            , "        fdiv", },
1858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdivs           , "       fdivs", },
1859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadd_ (void)
1865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadd.        17, 14, 15");
1867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadds_ (void)
1870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadds.       17, 14, 15");
1872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsub_ (void)
1875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsub.        17, 14, 15");
1877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsubs_ (void)
1880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsubs.       17, 14, 15");
1882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmul_ (void)
1885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmul.        17, 14, 15");
1887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmuls_ (void)
1890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmuls.       17, 14, 15");
1892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdiv_ (void)
1895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdiv.        17, 14, 15");
1897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdivs_ (void)
1900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdivs.       17, 14, 15");
1902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_two[] = {
1905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadd_           , "       fadd.", },
1906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadds_          , "      fadds.", },
1907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsub_           , "       fsub.", },
1908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsubs_          , "      fsubs.", },
1909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmul_           , "       fmul.", },
1910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmuls_          , "      fmuls.", },
1911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdiv_           , "       fdiv.", },
1912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdivs_          , "      fdivs.", },
1913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fcmpo (void)
1919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fcmpo        2, 14, 15");
1921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fcmpu (void)
1924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fcmpu        2, 14, 15");
1926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fcr_ops_two[] = {
1929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fcmpo           , "       fcmpo", },
1930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fcmpu           , "       fcmpu", },
1931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
193605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
193705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0   // TODO: Not yet supported
1938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fres (void)
1939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fres         17, 14");
1941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsqrte (void)
1944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("frsqrte      17, 14");
1946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
194705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
1948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsp (void)
1950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("frsp         17, 14");
1952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiw (void)
1955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiw        17, 14");
1957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiwz (void)
1960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiwz       17, 14");
1962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmr (void)
1965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmr          17, 14");
1967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fneg (void)
1970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fneg         17, 14");
1972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fabs (void)
1975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fabs         17, 14");
1977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnabs (void)
1980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnabs        17, 14");
1982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1984586fb038935723146cb6950b38911aeb9fc12765cerionstatic void test_fsqrt (void)
1985586fb038935723146cb6950b38911aeb9fc12765cerion{
1986586fb038935723146cb6950b38911aeb9fc12765cerion    __asm__ __volatile__ ("fsqrt        17, 14");
1987586fb038935723146cb6950b38911aeb9fc12765cerion}
1988586fb038935723146cb6950b38911aeb9fc12765cerion
1989a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1990a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fcfid (void)
1991a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1992a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fcfid        17, 14");
1993a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1994a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1995a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fctid (void)
1996a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1997a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fctid        17, 14");
1998a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1999a2a583876ee4197d0284960aeb594dc75bce2f09cerion
2000a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fctidz (void)
2001a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
2002a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fctidz       17, 14");
2003a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
2004a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
2005a2a583876ee4197d0284960aeb594dc75bce2f09cerion
2006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_one[] = {
200705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   //    { &test_fres            , "        fres", },   // TODO: Not yet supported
200805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   //    { &test_frsqrte         , "     frsqrte", },   // TODO: Not yet supported
2009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_frsp            , "        frsp", },
2010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiw           , "       fctiw", },
2011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiwz          , "      fctiwz", },
2012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmr             , "         fmr", },
2013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fneg            , "        fneg", },
2014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fabs            , "        fabs", },
2015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnabs           , "       fnabs", },
2016586fb038935723146cb6950b38911aeb9fc12765cerion    { &test_fsqrt           , "       fsqrt", },
2017a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
2018a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fcfid           , "       fcfid", },
2019a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fctid           , "       fctid", },
2020a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fctidz          , "      fctidz", },
2021a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
2022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
2025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
202705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
202805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0   // TODO: Not yet supported
2029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fres_ (void)
2030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fres.        17, 14");
2032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsqrte_ (void)
2035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("frsqrte.     17, 14");
2037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
203805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
2039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsp_ (void)
2041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("frsp.        17, 14");
2043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiw_ (void)
2046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiw.       17, 14");
2048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiwz_ (void)
2051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiwz.      17, 14");
2053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmr_ (void)
2056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmr.         17, 14");
2058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fneg_ (void)
2061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fneg.        17, 14");
2063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fabs_ (void)
2066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fabs.        17, 14");
2068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnabs_ (void)
2071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnabs.       17, 14");
2073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2075a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
2076a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fcfid_ (void)
2077a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
2078a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fcfid.       17, 14");
2079a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
2080a2a583876ee4197d0284960aeb594dc75bce2f09cerion
2081a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fctid_ (void)
2082a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
2083a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fctid.       17, 14");
2084a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
2085a2a583876ee4197d0284960aeb594dc75bce2f09cerion
2086a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fctidz_ (void)
2087a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
2088a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fctidz.      17, 14");
2089a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
2090a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
2091a2a583876ee4197d0284960aeb594dc75bce2f09cerion
2092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_one[] = {
209305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   //    { &test_fres_           , "       fres.", },   // TODO: Not yet supported
209405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    //    { &test_frsqrte_        , "    frsqrte.", },   // TODO: Not yet supported
2095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_frsp_           , "       frsp.", },
2096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiw_          , "      fctiw.", },
2097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiwz_         , "     fctiwz.", },
2098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmr_            , "        fmr.", },
2099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fneg_           , "       fneg.", },
2100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fabs_           , "       fabs.", },
2101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnabs_          , "      fnabs.", },
2102a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
2103a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fcfid_          , "      fcfid.", },
2104a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fctid_          , "      fctid.", },
2105a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fctidz_         , "     fctidz.", },
2106a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
2107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
2110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
2112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fl_ops_spe[] = {
2113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
2116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
2118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_flr_ops_spe[] = {
2119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
2122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2123c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2124c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
2125c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfs (void);
21268a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfs", "lfs          17,0(14)");
2127c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2128c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfsu (void);
21298a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfsu", "lfsu          17,0(14)");
2130c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2131c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfd (void);
21328a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfd", "lfd          17,0(14)");
2133c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2134c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfdu (void);
21358a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfdu", "lfdu          17,0(14)");
2136c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2137c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fld_ops_two_i16[] = {
2138c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfs             , "         lfs", },
2139c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfsu            , "        lfsu", },
2140c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfd             , "         lfd", },
2141c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfdu            , "        lfdu", },
2142c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { NULL,                   NULL,           },
2143c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion};
2144c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
2145c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2146c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
2147c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfsx (void)
2148c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2149c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("lfsx         17,14,15");
2150c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2151c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2152c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfsux (void)
2153c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2154c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("lfsux        17,14,15");
2155c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2156c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2157c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfdx (void)
2158c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2159c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("lfdx         17,14,15");
2160c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2161c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2162c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfdux (void)
2163c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2164c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("lfdux        17,14,15");
2165c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2166c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2167c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fld_ops_two[] = {
2168c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfsx            , "        lfsx", },
2169c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfsux           , "       lfsux", },
2170c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfdx            , "        lfdx", },
2171c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfdux           , "       lfdux", },
2172c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { NULL,                   NULL,           },
2173c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion};
2174c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
2175c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2176c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
2177c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfs (void);
21788a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfs", "stfs          14,0(15)");
2179c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2180c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfsu (void);
21818a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfsu", "stfsu          14,0(15)");
2182c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2183c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfd (void);
21848a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfd", "stfd          14,0(15)");
2185c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2186c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfdu (void);
21878a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfdu", "stfdu         14,0(15)");
2188c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2189c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fst_ops_three_i16[] = {
2190586fb038935723146cb6950b38911aeb9fc12765cerion    { &test_stfs             , "         stfs", },
2191586fb038935723146cb6950b38911aeb9fc12765cerion    { &test_stfsu            , "        stfsu", },
2192c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_stfd             , "         stfd", },
2193c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_stfdu            , "        stfdu", },
2194c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { NULL,                   NULL,           },
2195c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion};
2196c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
2197c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2198c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
2199c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfsx (void)
2200c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2201c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("stfsx         14,15,16");
2202c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2203c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2204c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfsux (void)
2205c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2206c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("stfsux        14,15,16");
2207c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2208c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2209c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfdx (void)
2210c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2211c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("stfdx         14,15,16");
2212c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2213c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2214c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfdux (void)
2215c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2216c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("stfdux        14,15,16");
2217c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2218c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2219c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fst_ops_three[] = {
2220586fb038935723146cb6950b38911aeb9fc12765cerion    { &test_stfsx            , "        stfsx", },
2221586fb038935723146cb6950b38911aeb9fc12765cerion    { &test_stfsux           , "       stfsux", },
2222c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_stfdx            , "        stfdx", },
2223c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_stfdux           , "       stfdux", },
2224c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { NULL,                   NULL,           },
2225c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion};
2226c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
2227c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2228c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2229f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmhaddshs (void)
2231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmhaddshs    17, 14, 15, 16");
2233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmhraddshs (void)
2236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmhraddshs   17, 14, 15, 16");
2238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmladduhm (void)
2241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmladduhm    17, 14, 15, 16");
2243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumubm (void)
2246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumubm     17, 14, 15, 16");
2248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumuhm (void)
2251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumuhm     17, 14, 15, 16");
2253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumshs (void)
2256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumshs     17, 14, 15, 16");
2258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumuhs (void)
2261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumuhs     17, 14, 15, 16");
2263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsummbm (void)
2266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsummbm     17, 14, 15, 16");
2268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumshm (void)
2271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumshm     17, 14, 15, 16");
2273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_aa_ops_three[] = {
2276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmhaddshs       , "   vmhaddshs", },
2277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmhraddshs      , "  vmhraddshs", },
2278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmladduhm       , "   vmladduhm", },
2279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumubm        , "    vmsumubm", },
2280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumuhm        , "    vmsumuhm", },
2281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumshs        , "    vmsumshs", },
2282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumuhs        , "    vmsumuhs", },
2283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsummbm        , "    vmsummbm", },
2284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumshm        , "    vmsumshm", },
2285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2287f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2289f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vperm (void)
2291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vperm        17, 14, 15, 16");
2293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsel (void)
2296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsel         17, 14, 15, 16");
2298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_three[] = {
2301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vperm           , "       vperm", },
2302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsel            , "        vsel", },
2303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2305f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2307f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddubm (void)
2309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddubm      17, 14, 15");
2311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduhm (void)
2314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduhm      17, 14, 15");
2316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduwm (void)
2319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduwm      17, 14, 15");
2321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddubs (void)
2324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddubs      17, 14, 15");
2326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduhs (void)
2329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduhs      17, 14, 15");
2331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduws (void)
2334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduws      17, 14, 15");
2336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddsbs (void)
2339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddsbs      17, 14, 15");
2341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddshs (void)
2344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddshs      17, 14, 15");
2346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddsws (void)
2349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddsws      17, 14, 15");
2351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddcuw (void)
2354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddcuw      17, 14, 15");
2356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsububm (void)
2359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsububm      17, 14, 15");
2361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuhm (void)
2364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuhm      17, 14, 15");
2366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuwm (void)
2369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuwm      17, 14, 15");
2371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsububs (void)
2374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsububs      17, 14, 15");
2376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuhs (void)
2379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuhs      17, 14, 15");
2381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuws (void)
2384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuws      17, 14, 15");
2386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubsbs (void)
2389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubsbs      17, 14, 15");
2391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubshs (void)
2394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubshs      17, 14, 15");
2396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubsws (void)
2399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubsws      17, 14, 15");
2401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubcuw (void)
2404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubcuw      17, 14, 15");
2406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuloub (void)
2409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmuloub      17, 14, 15");
2411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulouh (void)
2414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulouh      17, 14, 15");
2416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulosb (void)
2419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulosb      17, 14, 15");
2421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulosh (void)
2424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulosh      17, 14, 15");
2426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuleub (void)
2429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmuleub      17, 14, 15");
2431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuleuh (void)
2434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmuleuh      17, 14, 15");
2436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulesb (void)
2439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulesb      17, 14, 15");
2441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulesh (void)
2444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulesh      17, 14, 15");
2446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsumsws (void)
2449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsumsws      17, 14, 15");
2451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum2sws (void)
2454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum2sws     17, 14, 15");
2456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4ubs (void)
2459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum4ubs     17, 14, 15");
2461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4sbs (void)
2464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum4sbs     17, 14, 15");
2466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4shs (void)
2469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum4shs     17, 14, 15");
2471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgub (void)
2474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgub       17, 14, 15");
2476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavguh (void)
2479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavguh       17, 14, 15");
2481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavguw (void)
2484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavguw       17, 14, 15");
2486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsb (void)
2489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgsb       17, 14, 15");
2491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsh (void)
2494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgsh       17, 14, 15");
2496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsw (void)
2499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgsw       17, 14, 15");
2501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxub (void)
2504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxub       17, 14, 15");
2506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxuh (void)
2509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxuh       17, 14, 15");
2511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxuw (void)
2514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxuw       17, 14, 15");
2516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsb (void)
2519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxsb       17, 14, 15");
2521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsh (void)
2524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxsh       17, 14, 15");
2526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsw (void)
2529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxsw       17, 14, 15");
2531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminub (void)
2534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminub       17, 14, 15");
2536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminuh (void)
2539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminuh       17, 14, 15");
2541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminuw (void)
2544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminuw       17, 14, 15");
2546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsb (void)
2549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminsb       17, 14, 15");
2551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsh (void)
2554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminsh       17, 14, 15");
2556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsw (void)
2559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminsw       17, 14, 15");
2561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_aa_ops_two[] = {
2564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddubm         , "     vaddubm", },
2565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduhm         , "     vadduhm", },
2566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduwm         , "     vadduwm", },
2567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddubs         , "     vaddubs", },
2568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduhs         , "     vadduhs", },
2569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduws         , "     vadduws", },
2570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddsbs         , "     vaddsbs", },
2571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddshs         , "     vaddshs", },
2572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddsws         , "     vaddsws", },
2573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddcuw         , "     vaddcuw", },
2574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsububm         , "     vsububm", },
2575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuhm         , "     vsubuhm", },
2576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuwm         , "     vsubuwm", },
2577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsububs         , "     vsububs", },
2578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuhs         , "     vsubuhs", },
2579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuws         , "     vsubuws", },
2580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubsbs         , "     vsubsbs", },
2581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubshs         , "     vsubshs", },
2582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubsws         , "     vsubsws", },
2583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubcuw         , "     vsubcuw", },
2584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmuloub         , "     vmuloub", },
2585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulouh         , "     vmulouh", },
2586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulosb         , "     vmulosb", },
2587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulosh         , "     vmulosh", },
2588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmuleub         , "     vmuleub", },
2589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmuleuh         , "     vmuleuh", },
2590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulesb         , "     vmulesb", },
2591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulesh         , "     vmulesh", },
2592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsumsws         , "     vsumsws", },
2593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum2sws        , "    vsum2sws", },
2594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum4ubs        , "    vsum4ubs", },
2595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum4sbs        , "    vsum4sbs", },
2596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum4shs        , "    vsum4shs", },
2597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgub          , "      vavgub", },
2598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavguh          , "      vavguh", },
2599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavguw          , "      vavguw", },
2600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgsb          , "      vavgsb", },
2601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgsh          , "      vavgsh", },
2602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgsw          , "      vavgsw", },
2603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxub          , "      vmaxub", },
2604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxuh          , "      vmaxuh", },
2605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxuw          , "      vmaxuw", },
2606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxsb          , "      vmaxsb", },
2607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxsh          , "      vmaxsh", },
2608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxsw          , "      vmaxsw", },
2609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminub          , "      vminub", },
2610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminuh          , "      vminuh", },
2611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminuw          , "      vminuw", },
2612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminsb          , "      vminsb", },
2613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminsh          , "      vminsh", },
2614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminsw          , "      vminsw", },
2615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2617f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2619f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vand (void)
2621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vand         17, 14, 15");
2623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vor (void)
2626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vor          17, 14, 15");
2628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vxor (void)
2631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vxor         17, 14, 15");
2633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vandc (void)
2636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vandc        17, 14, 15");
2638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vnor (void)
2641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vnor         17, 14, 15");
2643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlb (void)
2646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrlb         17, 14, 15");
2648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlh (void)
2651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrlh         17, 14, 15");
2653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlw (void)
2656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrlw         17, 14, 15");
2658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslb (void)
2661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslb         17, 14, 15");
2663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslh (void)
2666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslh         17, 14, 15");
2668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslw (void)
2671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslw         17, 14, 15");
2673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrb (void)
2676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrb         17, 14, 15");
2678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrh (void)
2681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrh         17, 14, 15");
2683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrw (void)
2686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrw         17, 14, 15");
2688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrab (void)
2691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrab        17, 14, 15");
2693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrah (void)
2696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrah        17, 14, 15");
2698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsraw (void)
2701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsraw        17, 14, 15");
2703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuhum (void)
2706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuhum      17, 14, 15");
2708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuwum (void)
2711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuwum      17, 14, 15");
2713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuhus (void)
2716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuhus      17, 14, 15");
2718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuwus (void)
2721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuwus      17, 14, 15");
2723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkshus (void)
2726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkshus      17, 14, 15");
2728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkswus (void)
2731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkswus      17, 14, 15");
2733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkshss (void)
2736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkshss      17, 14, 15");
2738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkswss (void)
2741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkswss      17, 14, 15");
2743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkpx (void)
2746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkpx        17, 14, 15");
2748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghb (void)
2751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrghb       17, 14, 15");
2753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghh (void)
2756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrghh       17, 14, 15");
2758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghw (void)
2761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrghw       17, 14, 15");
2763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglb (void)
2766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrglb       17, 14, 15");
2768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglh (void)
2771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrglh       17, 14, 15");
2773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglw (void)
2776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrglw       17, 14, 15");
2778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslo (void)
2781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslo         17, 14, 15");
2783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsro (void)
2786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsro         17, 14, 15");
2788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_two[] = {
2791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vand            , "        vand", },
2792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vor             , "         vor", },
2793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vxor            , "        vxor", },
2794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vandc           , "       vandc", },
2795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vnor            , "        vnor", },
2796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrlb            , "        vrlb", },
2797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrlh            , "        vrlh", },
2798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrlw            , "        vrlw", },
2799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslb            , "        vslb", },
2800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslh            , "        vslh", },
2801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslw            , "        vslw", },
2802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrb            , "        vsrb", },
2803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrh            , "        vsrh", },
2804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrw            , "        vsrw", },
2805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrab           , "       vsrab", },
2806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrah           , "       vsrah", },
2807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsraw           , "       vsraw", },
2808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuhum         , "     vpkuhum", },
2809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuwum         , "     vpkuwum", },
2810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuhus         , "     vpkuhus", },
2811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuwus         , "     vpkuwus", },
2812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkshus         , "     vpkshus", },
2813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkswus         , "     vpkswus", },
2814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkshss         , "     vpkshss", },
2815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkswss         , "     vpkswss", },
2816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkpx           , "       vpkpx", },
2817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrghb          , "      vmrghb", },
2818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrghh          , "      vmrghh", },
2819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrghw          , "      vmrghw", },
2820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrglb          , "      vmrglb", },
2821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrglh          , "      vmrglh", },
2822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrglw          , "      vmrglw", },
2823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslo            , "        vslo", },
2824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsro            , "        vsro", },
2825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2827f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2829f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhsb (void)
2831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupkhsb      17, 14");
2833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhsh (void)
2836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupkhsh      17, 14");
2838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhpx (void)
2841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupkhpx      17, 14");
2843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklsb (void)
2846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupklsb      17, 14");
2848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklsh (void)
2851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupklsh      17, 14");
2853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklpx (void)
2856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupklpx      17, 14");
2858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_one[] = {
2861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupkhsb         , "     vupkhsb", },
2862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupkhsh         , "     vupkhsh", },
2863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupkhpx         , "     vupkhpx", },
2864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupklsb         , "     vupklsb", },
2865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupklsh         , "     vupklsh", },
2866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupklpx         , "     vupklpx", },
2867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2869f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2871f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtub (void)
2873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtub     17, 14, 15");
2875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuh (void)
2878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuh     17, 14, 15");
2880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuw (void)
2883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuw     17, 14, 15");
2885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsb (void)
2888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsb     17, 14, 15");
2890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsh (void)
2893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsh     17, 14, 15");
2895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsw (void)
2898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsw     17, 14, 15");
2900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequb (void)
2903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequb     17, 14, 15");
2905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequh (void)
2908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequh     17, 14, 15");
2910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequw (void)
2913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequw     17, 14, 15");
2915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ac_ops_two[] = {
2918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtub        , "    vcmpgtub", },
2919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuh        , "    vcmpgtuh", },
2920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuw        , "    vcmpgtuw", },
2921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsb        , "    vcmpgtsb", },
2922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsh        , "    vcmpgtsh", },
2923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsw        , "    vcmpgtsw", },
2924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequb        , "    vcmpequb", },
2925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequh        , "    vcmpequh", },
2926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequw        , "    vcmpequw", },
2927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2929f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2931f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtub_ (void)
2933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtub.    17, 14, 15");
2935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuh_ (void)
2938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuh.    17, 14, 15");
2940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuw_ (void)
2943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuw.    17, 14, 15");
2945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsb_ (void)
2948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsb.    17, 14, 15");
2950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsh_ (void)
2953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsh.    17, 14, 15");
2955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsw_ (void)
2958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsw.    17, 14, 15");
2960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequb_ (void)
2963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequb.    17, 14, 15");
2965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequh_ (void)
2968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequh.    17, 14, 15");
2970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequw_ (void)
2973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequw.    17, 14, 15");
2975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_acr_ops_two[] = {
2978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtub_       , "   vcmpgtub.", },
2979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuh_       , "   vcmpgtuh.", },
2980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuw_       , "   vcmpgtuw.", },
2981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsb_       , "   vcmpgtsb.", },
2982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsh_       , "   vcmpgtsh.", },
2983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsw_       , "   vcmpgtsw.", },
2984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequb_       , "   vcmpequb.", },
2985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequh_       , "   vcmpequh.", },
2986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequw_       , "   vcmpequw.", },
2987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2989f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2991f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsl (void)
2993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsl          17, 14, 15");
2995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsr (void)
2998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsr          17, 14, 15");
3000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
300257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltb (void);
30038a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltb", "vspltb       17, 14, 0");
300457778621b9d85c82fcb5185ba146add1715c5432sewardj
300557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vsplth (void);
30068a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vsplth", "vsplth       17, 14, 0");
300757778621b9d85c82fcb5185ba146add1715c5432sewardj
300857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltw (void);
30098a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltw", "vspltw       17, 14, 0");
301057778621b9d85c82fcb5185ba146add1715c5432sewardj
301157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltisb (void);
30128a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltisb", "vspltisb       17, 0");
301357778621b9d85c82fcb5185ba146add1715c5432sewardj
301457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltish (void);
30158a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltish", "vspltish       17, 0");
301657778621b9d85c82fcb5185ba146add1715c5432sewardj
301757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltisw (void);
30188a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltisw", "vspltisw       17, 0");
301957778621b9d85c82fcb5185ba146add1715c5432sewardj
302057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vsldoi (void);
30218a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vsldoi", "vsldoi       17, 14, 15, 0");
3022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
302305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvsl (void)
302405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
302505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvsl         17, 14, 15");
302605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
302705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
302805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvsr (void)
302905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
303005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvsr         17, 14, 15");
303105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
303205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
3033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_av_int_ops_spe[] = {
3034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsl             , "         vsl", },
3035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsr             , "         vsr", },
3036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltb          , "      vspltb", },
3037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsplth          , "      vsplth", },
3038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltw          , "      vspltw", },
3039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltisb        , "    vspltisb", },
3040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltish        , "    vspltish", },
3041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltisw        , "    vspltisw", },
3042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsldoi          , "      vsldoi", },
304305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvsl            , "        lvsl", },
304405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvsr            , "        lvsr", },
3045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3047f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3049f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
305005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvebx (void)
305105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
305205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvebx        17,14,15");
305305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
305405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
305505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvehx (void)
305605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
305705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvehx        17,14,15");
305805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
305905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
306005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvewx (void)
306105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
306205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvewx        17,14,15");
306305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
306405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
306505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvx (void)
306605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
306705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvx          17,14,15");
306805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
306905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
30700b21412e4daca69e48895a713111fe906133cd53sewardjstatic void test_lvxl (void)
30710b21412e4daca69e48895a713111fe906133cd53sewardj{
30720b21412e4daca69e48895a713111fe906133cd53sewardj    __asm__ __volatile__ ("lvxl         17,14,15");
30730b21412e4daca69e48895a713111fe906133cd53sewardj}
30740b21412e4daca69e48895a713111fe906133cd53sewardj
307505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic test_t tests_ald_ops_two[] = {
307605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvebx           , "       lvebx", },
307705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvehx           , "       lvehx", },
307805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvewx           , "       lvewx", },
307905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvx             , "         lvx", },
30800b21412e4daca69e48895a713111fe906133cd53sewardj    { &test_lvxl            , "        lvxl", },
308105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { NULL,                   NULL,           },
308205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion};
3083f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
308405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
3085f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
308605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvebx (void)
308705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
308805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvebx       14,15,16");
308905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
309005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
309105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvehx (void)
309205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
309305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvehx       14,15,16");
309405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
309505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
309605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvewx (void)
309705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
309805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvewx       14,15,16");
309905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
310005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
310105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvx (void)
310205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
310305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvx         14,15,16");
310405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
310505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
31060b21412e4daca69e48895a713111fe906133cd53sewardjstatic void test_stvxl (void)
31070b21412e4daca69e48895a713111fe906133cd53sewardj{
31080b21412e4daca69e48895a713111fe906133cd53sewardj    __asm__ __volatile__ ("stvxl        14,15,16");
31090b21412e4daca69e48895a713111fe906133cd53sewardj}
31100b21412e4daca69e48895a713111fe906133cd53sewardj
311105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic test_t tests_ast_ops_three[] = {
311205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvebx          , "      stvebx", },
311305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvehx          , "      stvehx", },
311405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvewx          , "      stvewx", },
311505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvx            , "        stvx", },
31160b21412e4daca69e48895a713111fe906133cd53sewardj    { &test_stvxl           , "       stvxl", },
311705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { NULL,                   NULL,           },
311805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion};
3119f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
312005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
3121f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
312205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0
3123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaddfp (void)
3124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaddfp      17, 14, 15, 16");
3126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vnmsubfp (void)
3129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vnmsubfp     17, 14, 15, 16");
3131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
313205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
3133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_three[] = {
313505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion//    { &test_vmaddfp         , "     vmaddfp", },   // TODO: Not yet supported
313605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion//    { &test_vnmsubfp        , "    vnmsubfp", },   // TODO: Not yet supported
3137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3139f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3141f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
3142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddfp (void)
3143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddfp       17, 14, 15");
3145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubfp (void)
3148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubfp       17, 14, 15");
3150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxfp (void)
3153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxfp       17, 14, 15");
3155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminfp (void)
3158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminfp       17, 14, 15");
3160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_two[] = {
3163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddfp          , "      vaddfp", },
3164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubfp          , "      vsubfp", },
3165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxfp          , "      vmaxfp", },
3166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminfp          , "      vminfp", },
3167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3169f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3171f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
3172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfin (void)
3173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfin        17, 14");
3175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfiz (void)
3178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfiz        17, 14");
3180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfip (void)
3183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfip        17, 14");
3185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfim (void)
3188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfim        17, 14");
3190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrefp (void)
3193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrefp        17, 14");
3195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrsqrtefp (void)
3198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrsqrtefp    17, 14");
3200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
320205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0   // TODO: Not yet supported
3203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vlogefp (void)
3204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vlogefp      17, 14");
3206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vexptefp (void)
3209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vexptefp     17, 14");
3211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
321205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
3213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_one[] = {
32158f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vrfin           , "       vrfin", },
32168f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vrfiz           , "       vrfiz", },
32178f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vrfip           , "       vrfip", },
32188f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vrfim           , "       vrfim", },
3219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrefp           , "       vrefp", },
3220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrsqrtefp       , "   vrsqrtefp", },
3221b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion    //    { &test_vlogefp         , "     vlogefp", },   // TODO: Not yet supported
3222b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion    //    { &test_vexptefp        , "    vexptefp", },   // TODO: Not yet supported
3223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3225f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3227f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
3228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtfp (void)
3229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtfp     17, 14, 15");
3231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpeqfp (void)
3234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpeqfp     17, 14, 15");
3236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgefp (void)
3239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgefp     17, 14, 15");
3241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpbfp (void)
3244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpbfp      17, 14, 15");
3246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afc_ops_two[] = {
3249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtfp        , "    vcmpgtfp", },
3250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpeqfp        , "    vcmpeqfp", },
3251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgefp        , "    vcmpgefp", },
3252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpbfp         , "     vcmpbfp", },
3253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3255f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3257f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
3258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtfp_ (void)
3259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtfp.    17, 14, 15");
3261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpeqfp_ (void)
3264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpeqfp.    17, 14, 15");
3266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgefp_ (void)
3269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgefp.    17, 14, 15");
3271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpbfp_ (void)
3274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpbfp.     17, 14, 15");
3276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afcr_ops_two[] = {
3279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtfp_       , "   vcmpgtfp.", },
3280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpeqfp_       , "   vcmpeqfp.", },
3281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgefp_       , "   vcmpgefp.", },
3282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpbfp_        , "    vcmpbfp.", },
3283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3285f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3287f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
328857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vcfux (void);
32898a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vcfux", "vcfux        17, 14, 0");
329057778621b9d85c82fcb5185ba146add1715c5432sewardj
329157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vcfsx (void);
32928a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vcfsx", "vcfsx        17, 14, 0");
329357778621b9d85c82fcb5185ba146add1715c5432sewardj
329457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vctuxs (void);
32958a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vctuxs", "vctuxs        17, 14, 0");
329657778621b9d85c82fcb5185ba146add1715c5432sewardj
329757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vctsxs (void);
32988a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vctsxs", "vctsxs        17, 14, 0");
32998f5fc19da719edcd8dfca920837bde7ce1d3accacerion
33008f5fc19da719edcd8dfca920837bde7ce1d3accacerionstatic test_t tests_av_float_ops_spe[] = {
33018f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vcfux           , "       vcfux", },
33028f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vcfsx           , "       vcfsx", },
33038f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vctuxs          , "      vctuxs", },
33048f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vctsxs          , "      vctsxs", },
33058f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { NULL,                   NULL,           },
33068f5fc19da719edcd8dfca920837bde7ce1d3accacerion};
3307f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
33088f5fc19da719edcd8dfca920837bde7ce1d3accacerion
3309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
3310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchw (void)
3311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchw       17, 14, 15");
3313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwo (void)
3316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwo      17, 14, 15");
3318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchws (void)
3321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchws      17, 14, 15");
3323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwso (void)
3326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwso     17, 14, 15");
3328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsu (void)
3331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsu     17, 14, 15");
3333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsuo (void)
3336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsuo    17, 14, 15");
3338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwu (void)
3341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwu      17, 14, 15");
3343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwuo (void)
3346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwuo     17, 14, 15");
3348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhw (void)
3351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhw       17, 14, 15");
3353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwo (void)
3356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwo      17, 14, 15");
3358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhws (void)
3361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhws      17, 14, 15");
3363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwso (void)
3366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwso     17, 14, 15");
3368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsu (void)
3371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsu     17, 14, 15");
3373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsuo (void)
3376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsuo    17, 14, 15");
3378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwu (void)
3381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwu      17, 14, 15");
3383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwuo (void)
3386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwuo     17, 14, 15");
3388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhw (void)
3391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhw       17, 14, 15");
3393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwo (void)
3396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwo      17, 14, 15");
3398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhws (void)
3401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhws      17, 14, 15");
3403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwso (void)
3406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwso     17, 14, 15");
3408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsu (void)
3411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsu     17, 14, 15");
3413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsuo (void)
3416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsuo    17, 14, 15");
3418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwu (void)
3421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwu      17, 14, 15");
3423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwuo (void)
3426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwuo     17, 14, 15");
3428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchw (void)
3431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchw       17, 14, 15");
3433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchwu (void)
3436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchwu      17, 14, 15");
3438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhw (void)
3441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhw       17, 14, 15");
3443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhwu (void)
3446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhwu      17, 14, 15");
3448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhw (void)
3451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhw       17, 14, 15");
3453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhwu (void)
3456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhwu      17, 14, 15");
3458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchw (void)
3461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchw      17, 14, 15");
3463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwo (void)
3466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwo     17, 14, 15");
3468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchws (void)
3471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchws     17, 14, 15");
3473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwso (void)
3476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwso    17, 14, 15");
3478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhw (void)
3481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhw      17, 14, 15");
3483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwo (void)
3486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwo     17, 14, 15");
3488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhws (void)
3491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhws     17, 14, 15");
3493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwso (void)
3496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwso    17, 14, 15");
3498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhw (void)
3501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhw      17, 14, 15");
3503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwo (void)
3506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwo     17, 14, 15");
3508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhws (void)
3511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhws     17, 14, 15");
3513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwso (void)
3516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwso    17, 14, 15");
3518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_p4m_ops_two[] = {
3521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchw          , "      macchw", },
3522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwo         , "     macchwo", },
3523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchws         , "     macchws", },
3524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwso        , "    macchwso", },
3525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsu        , "    macchwsu", },
3526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsuo       , "   macchwsuo", },
3527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwu         , "     macchwu", },
3528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwuo        , "    macchwuo", },
3529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhw          , "      machhw", },
3530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwo         , "     machhwo", },
3531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhws         , "     machhws", },
3532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwso        , "    machhwso", },
3533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsu        , "    machhwsu", },
3534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsuo       , "   machhwsuo", },
3535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwu         , "     machhwu", },
3536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwuo        , "    machhwuo", },
3537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhw          , "      maclhw", },
3538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwo         , "     maclhwo", },
3539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhws         , "     maclhws", },
3540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwso        , "    maclhwso", },
3541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsu        , "    maclhwsu", },
3542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsuo       , "   maclhwsuo", },
3543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwu         , "     maclhwu", },
3544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwuo        , "    maclhwuo", },
3545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchw          , "      mulchw", },
3546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchwu         , "     mulchwu", },
3547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhw          , "      mulhhw", },
3548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhwu         , "     mulhhwu", },
3549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhw          , "      mullhw", },
3550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhwu         , "     mullhwu", },
3551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchw         , "     nmacchw", },
3552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwo        , "    nmacchwo", },
3553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchws        , "    nmacchws", },
3554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwso       , "   nmacchwso", },
3555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhw         , "     nmachhw", },
3556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwo        , "    nmachhwo", },
3557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhws        , "    nmachhws", },
3558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwso       , "   nmachhwso", },
3559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhw         , "     nmaclhw", },
3560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwo        , "    nmaclhwo", },
3561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhws        , "    nmaclhws", },
3562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwso       , "   nmaclhwso", },
3563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
3566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
3568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchw_ (void)
3569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchw.      17, 14, 15");
3571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwo_ (void)
3574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwo.     17, 14, 15");
3576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchws_ (void)
3579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchws.     17, 14, 15");
3581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwso_ (void)
3584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwso.    17, 14, 15");
3586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsu_ (void)
3589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsu.    17, 14, 15");
3591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsuo_ (void)
3594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsuo.   17, 14, 15");
3596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwu_ (void)
3599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwu.     17, 14, 15");
3601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwuo_ (void)
3604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwuo.    17, 14, 15");
3606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhw_ (void)
3609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhw.      17, 14, 15");
3611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwo_ (void)
3614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwo.     17, 14, 15");
3616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhws_ (void)
3619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhws.     17, 14, 15");
3621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwso_ (void)
3624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwso.    17, 14, 15");
3626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsu_ (void)
3629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsu.    17, 14, 15");
3631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsuo_ (void)
3634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsuo.   17, 14, 15");
3636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwu_ (void)
3639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwu.     17, 14, 15");
3641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwuo_ (void)
3644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwuo.    17, 14, 15");
3646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhw_ (void)
3649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhw.      17, 14, 15");
3651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwo_ (void)
3654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwo.     17, 14, 15");
3656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhws_ (void)
3659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhws.     17, 14, 15");
3661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwso_ (void)
3664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwso.    17, 14, 15");
3666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsu_ (void)
3669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsu.    17, 14, 15");
3671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsuo_ (void)
3674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsuo.   17, 14, 15");
3676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwu_ (void)
3679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwu.     17, 14, 15");
3681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwuo_ (void)
3684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwuo.    17, 14, 15");
3686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchw_ (void)
3689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchw.      17, 14, 15");
3691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchwu_ (void)
3694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchwu.     17, 14, 15");
3696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhw_ (void)
3699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhw.      17, 14, 15");
3701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhwu_ (void)
3704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhwu.     17, 14, 15");
3706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhw_ (void)
3709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhw.      17, 14, 15");
3711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhwu_ (void)
3714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhwu.     17, 14, 15");
3716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchw_ (void)
3719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchw.     17, 14, 15");
3721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwo_ (void)
3724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwo.    17, 14, 15");
3726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchws_ (void)
3729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchws.    17, 14, 15");
3731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwso_ (void)
3734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwso.   17, 14, 15");
3736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhw_ (void)
3739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhw.     17, 14, 15");
3741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwo_ (void)
3744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwo.    17, 14, 15");
3746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhws_ (void)
3749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhws.    17, 14, 15");
3751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwso_ (void)
3754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwso.   17, 14, 15");
3756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhw_ (void)
3759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhw.     17, 14, 15");
3761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwo_ (void)
3764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwo.    17, 14, 15");
3766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhws_ (void)
3769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhws.    17, 14, 15");
3771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwso_ (void)
3774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwso.   17, 14, 15");
3776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_p4mc_ops_two[] = {
3779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchw_         , "     macchw.", },
3780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwo_        , "    macchwo.", },
3781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchws_        , "    macchws.", },
3782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwso_       , "   macchwso.", },
3783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsu_       , "   macchwsu.", },
3784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsuo_      , "  macchwsuo.", },
3785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwu_        , "    macchwu.", },
3786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwuo_       , "   macchwuo.", },
3787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhw_         , "     machhw.", },
3788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwo_        , "    machhwo.", },
3789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhws_        , "    machhws.", },
3790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwso_       , "   machhwso.", },
3791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsu_       , "   machhwsu.", },
3792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsuo_      , "  machhwsuo.", },
3793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwu_        , "    machhwu.", },
3794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwuo_       , "   machhwuo.", },
3795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhw_         , "     maclhw.", },
3796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwo_        , "    maclhwo.", },
3797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhws_        , "    maclhws.", },
3798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwso_       , "   maclhwso.", },
3799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsu_       , "   maclhwsu.", },
3800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsuo_      , "  maclhwsuo.", },
3801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwu_        , "    maclhwu.", },
3802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwuo_       , "   maclhwuo.", },
3803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchw_         , "     mulchw.", },
3804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchwu_        , "    mulchwu.", },
3805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhw_         , "     mulhhw.", },
3806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhwu_        , "    mulhhwu.", },
3807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhw_         , "     mullhw.", },
3808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhwu_        , "    mullhwu.", },
3809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchw_        , "    nmacchw.", },
3810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwo_       , "   nmacchwo.", },
3811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchws_       , "   nmacchws.", },
3812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwso_      , "  nmacchwso.", },
3813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhw_        , "    nmachhw.", },
3814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwo_       , "   nmachhwo.", },
3815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhws_       , "   nmachhws.", },
3816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwso_      , "  nmachhwso.", },
3817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhw_        , "    nmaclhw.", },
3818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwo_       , "   nmaclhwo.", },
3819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhws_       , "   nmaclhws.", },
3820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwso_      , "  nmaclhwso.", },
3821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
3824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_table_t all_tests[] = {
3826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ia_ops_two      ,
3828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args",
3829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010102,
3830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iar_ops_two     ,
3833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args with flags update",
3834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010102,
3835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iac_ops_two     ,
3838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args and carry",
3839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x02010102,
3840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iacr_ops_two    ,
3843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args and carry with flags update",
3844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x03010102,
3845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_two      ,
3848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with two args",
3849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010202,
3850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_two     ,
3853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with two args with flags update",
3854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010202,
3855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_icr_ops_two     ,
3858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer compare insns (two args)",
3859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010304,
3860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_icr_ops_two_i16 ,
3863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer compare with immediate insns (two args)",
3864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010305,
3865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ia_ops_two_i16  ,
3868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns\n    with one register + one 16 bits immediate args",
3869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010106,
3870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iar_ops_two_i16 ,
3873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns\n    with one register + one 16 bits immediate args with flags update",
3874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010106,
3875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_two_i16  ,
3878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns\n    with one register + one 16 bits immediate args",
3879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010206,
3880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_two_i16 ,
3883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns\n    with one register + one 16 bits immediate args with flags update",
3884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010206,
3885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_crl_ops_two     ,
3888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC condition register logical insns - two operands",
3889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010202,
3890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iac_ops_one     ,
3893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with one arg and carry",
3894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x02010101,
3895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iacr_ops_one    ,
3898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with one arg and carry with flags update",
3899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x03010101,
3900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_one      ,
3903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with one arg",
3904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010201,
3905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_one     ,
3908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with one arg with flags update",
3909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010201,
3910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_spe      ,
3913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC logical insns with special forms",
3914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010207,
3915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_spe     ,
3918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC logical insns with special forms with flags update",
3919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010207,
3920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ild_ops_two_i16 ,
3923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer load insns\n    with one register + one 16 bits immediate args with flags update",
3924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010508,
3925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ild_ops_two     ,
3928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer load insns with two register args",
3929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010509,
3930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ist_ops_three_i16,
3933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer store insns\n    with one register + one 16 bits immediate args with flags update",
3934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x0001050a,
3935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ist_ops_three   ,
3938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer store insns with three register args",
3939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x0001050b,
3940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fa_ops_three    ,
3944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns with three args",
3945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020103,
3946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3950c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        tests_far_ops_three    ,
3951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns\n    with three args with flags update",
3952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020103,
3953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fa_ops_two      ,
3958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns with two args",
3959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020102,
3960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_far_ops_two     ,
3965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns\n    with two args with flags update",
3966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020102,
3967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fcr_ops_two     ,
3972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point compare insns (two args)",
3973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020304,
3974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fa_ops_one      ,
3979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns with one arg",
3980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020101,
3981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_far_ops_one     ,
3986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns\n    with one arg with flags update",
3987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020101,
3988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fl_ops_spe      ,
3993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point status register manipulation insns",
3994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020207,
3995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_flr_ops_spe     ,
4000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point status register manipulation insns\n  with flags update",
4001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020207,
4002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
4004c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
4005c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    {
4006c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        tests_fld_ops_two_i16 ,
4007c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        "PPC float load insns\n    with one register + one 16 bits immediate args with flags update",
4008c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        0x00020508,
4009c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    },
4010c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
4011c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
4012c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    {
4013c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        tests_fld_ops_two     ,
4014c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        "PPC float load insns with two register args",
4015c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        0x00020509,
4016c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    },
4017c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
4018c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
4019c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    {
4020c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        tests_fst_ops_three_i16,
4021c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        "PPC float store insns\n    with one register + one 16 bits immediate args with flags update",
4022c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        0x0002050a,
4023c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    },
4024c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
4025c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
4026c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    {
4027c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        tests_fst_ops_three   ,
4028c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        "PPC float store insns with three register args",
4029c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        0x0002050b,
4030c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    },
4031c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
4032f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_aa_ops_three    ,
4035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer arith insns with three args",
4036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040103,
4037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4038f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4039f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_al_ops_three    ,
4042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer logical insns with three args",
4043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040203,
4044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4045f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4046f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_aa_ops_two      ,
4049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer arith insns with two args",
4050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040102,
4051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4052f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4053f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_al_ops_two      ,
4056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer logical insns with two args",
4057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040202,
4058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4059f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4060f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_al_ops_one      ,
4063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer logical insns with one arg",
4064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040201,
4065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4066f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4067f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ac_ops_two      ,
4070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec integer compare insns",
4071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040302,
4072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4073f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4074f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_acr_ops_two     ,
4077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec integer compare insns with flags update",
4078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01040302,
4079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4080f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4081f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_av_int_ops_spe  ,
4084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec integer special insns",
4085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040207,
4086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4087f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4088f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
409005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        tests_ald_ops_two     ,
409105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        "Altivec load insns with two register args",
409205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        0x00040509,
409305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    },
4094f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4095f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
409605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    {
409705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        tests_ast_ops_three   ,
409805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        "Altivec store insns with three register args",
409905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        0x0004050b,
410005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    },
4101f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4102f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
410305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    {
4104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afa_ops_three   ,
4105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point arith insns with three args",
4106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00050103,
4107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4108f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4109f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afa_ops_two     ,
4112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point arith insns with two args",
4113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00050102,
4114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4115f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4116f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afa_ops_one     ,
4119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point arith insns with one arg",
4120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00050101,
4121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4122f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4123f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afc_ops_two     ,
4126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point compare insns",
4127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00050302,
4128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4129f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4130f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afcr_ops_two    ,
4133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point compare insns with flags update",
4134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01050302,
4135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4136f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4137f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
41388f5fc19da719edcd8dfca920837bde7ce1d3accacerion    {
41398f5fc19da719edcd8dfca920837bde7ce1d3accacerion        tests_av_float_ops_spe,
41408f5fc19da719edcd8dfca920837bde7ce1d3accacerion        "Altivec float special insns",
41418f5fc19da719edcd8dfca920837bde7ce1d3accacerion        0x00050207,
41428f5fc19da719edcd8dfca920837bde7ce1d3accacerion    },
4143f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
4145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_p4m_ops_two     ,
4147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC 405 mac insns with three args",
4148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00030102,
4149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
4151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
4152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_p4mc_ops_two    ,
4154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC 405 mac insns with three args with flags update",
4155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01030102,
4156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
4158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,               0x00000000, },
4159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
4160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- END #include "ops-ppc.c" -------------- */
4162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int verbose = 0;
4164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int arg_list_size = 0;
4165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4166b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic double *fargs = NULL;
4167b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_fargs = 0;
4168b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_normal_fargs = 0;
4169b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic HWord_t *iargs = NULL;
4170b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_iargs = 0;
4171b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic uint16_t *ii16 = NULL;
4172b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_ii16 = 0;
4173b5b6311a5312378c0129587d0dc0b255188a1d53sewardj
4174f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4175b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic vector unsigned int* viargs = NULL;
4176b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_viargs = 0;
4177b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic vector float* vfargs = NULL;
4178b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_vfargs = 0;
4179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#define TEST_VSCR_SAT
4181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void register_farg (void *farg,
41848a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion                                  int s, uint16_t _exp, uint64_t mant)
4185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t tmp;
4187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
41888a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   tmp = ((uint64_t)s << 63) | ((uint64_t)_exp << 52) | mant;
4189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   *(uint64_t *)farg = tmp;
4190a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("%d %03x %013llx => %016llx %0e\n",
4192a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
4193a2a583876ee4197d0284960aeb594dc75bce2f09cerion   AB_DPRINTF("%d %03x %013lx => %016lx %0e\n",
4194a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
41958a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion              s, _exp, mant, *(uint64_t *)farg, *(double *)farg);
4196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_fargs_table (void)
4199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4200c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* Double precision:
4201c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Sign goes from zero to one               (1 bit)
4202c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Exponent goes from 0 to ((1 << 12) - 1)  (11 bits)
4203c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Mantissa goes from 1 to ((1 << 52) - 1)  (52 bits)
4204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * + special values:
4205c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +0.0      : 0 0x000 0x0000000000000 => 0x0000000000000000
4206c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -0.0      : 1 0x000 0x0000000000000 => 0x8000000000000000
4207c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +infinity : 0 0x7FF 0x0000000000000 => 0x7FF0000000000000
4208c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -infinity : 1 0x7FF 0x0000000000000 => 0xFFF0000000000000
4209c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +QNaN     : 0 0x7FF 0x7FFFFFFFFFFFF => 0x7FF7FFFFFFFFFFFF
4210c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -QNaN     : 1 0x7FF 0x7FFFFFFFFFFFF => 0xFFF7FFFFFFFFFFFF
4211c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +SNaN     : 0 0x7FF 0x8000000000000 => 0x7FF8000000000000
4212c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -SNaN     : 1 0x7FF 0x8000000000000 => 0xFFF8000000000000
4213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * (8 values)
4214c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
4215c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Ref only:
4216c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Single precision
4217c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Sign:     1 bit
4218c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Exponent: 8 bits
4219c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Mantissa: 23 bits
4220c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +0.0      : 0 0x00 0x000000 => 0x00000000
4221c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -0.0      : 1 0x00 0x000000 => 0x80000000
4222c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +infinity : 0 0xFF 0x000000 => 0x7F800000
4223c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -infinity : 1 0xFF 0x000000 => 0xFF800000
4224c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +QNaN     : 0 0xFF 0x3FFFFF => 0x7FBFFFFF
4225c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -QNaN     : 1 0xFF 0x3FFFFF => 0xFFBFFFFF
4226c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +SNaN     : 0 0xFF 0x400000 => 0x7FC00000
4227c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -SNaN     : 1 0xFF 0x400000 => 0xFFC00000
4228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    */
4229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t mant;
42308a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   uint16_t _exp, e0, e1;
4231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int s;
4232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
4233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4234586fb038935723146cb6950b38911aeb9fc12765cerion   /* Note: VEX isn't so hot with denormals, so don't bother
42358a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion      testing them: set _exp > 0
4236586fb038935723146cb6950b38911aeb9fc12765cerion   */
4237586fb038935723146cb6950b38911aeb9fc12765cerion
4238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if ( arg_list_size == 1 ) {   // Large
4239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fargs = malloc(200 * sizeof(double));
4240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (s=0; s<2; s++) {
4241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (e0=0; e0<2; e0++) {
4242586fb038935723146cb6950b38911aeb9fc12765cerion            for (e1=0x001; ; e1 = ((e1 + 1) << 2) + 6) {
4243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 >= 0x400)
4244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  e1 = 0x3fe;
42458a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion               _exp = (e0 << 10) | e1;
4246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               for (mant = 0x0000000000001ULL; mant < (1ULL << 52);
4247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    /* Add 'random' bits */
4248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    mant = ((mant + 0x4A6) << 13) + 0x359) {
42498a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion                  register_farg(&fargs[i++], s, _exp, mant);
4250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               }
4251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 == 0x3fe)
4252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  break;
4253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
4254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
4255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {                      // Default
4257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fargs = malloc(16 * sizeof(double));
4258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (s=0; s<2; s++) {                                // x2
4259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//       for (e0=0; e0<2; e0++) {
4260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            for (e1=0x001; ; e1 = ((e1 + 1) << 13) + 7) {  // x2
4261586fb038935723146cb6950b38911aeb9fc12765cerion//          for (e1=0x001; ; e1 = ((e1 + 1) << 5) + 7) {   // x3
4262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 >= 0x400)
4263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  e1 = 0x3fe;
42648a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion//             _exp = (e0 << 10) | e1;
42658a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion               _exp = e1;
4266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               for (mant = 0x0000000000001ULL; mant < (1ULL << 52);
4267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    /* Add 'random' bits */
4268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    mant = ((mant + 0x4A6) << 29) + 0x359) {  // x2
42698a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion                  register_farg(&fargs[i++], s, _exp, mant);
4270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               }
4271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 == 0x3fe)
4272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  break;
4273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
4274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//       }
4275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4278586fb038935723146cb6950b38911aeb9fc12765cerion   /* To iterate over non-special values only */
4279586fb038935723146cb6950b38911aeb9fc12765cerion   nb_normal_fargs = i;
4280586fb038935723146cb6950b38911aeb9fc12765cerion
4281586fb038935723146cb6950b38911aeb9fc12765cerion
4282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Special values */
4283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +0.0      : 0 0x000 0x0000000000000 */
4284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
42858a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x000;
4286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
42878a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -0.0      : 1 0x000 0x0000000000000 */
4289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
42908a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x000;
4291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
42928a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +infinity : 0 0x7FF 0x0000000000000  */
4294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
42958a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
42978a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -infinity : 1 0x7FF 0x0000000000000 */
4299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
43008a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
43028a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4303c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* +QNaN     : 0 0x7FF 0x7FFFFFFFFFFFF */
4304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
43058a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x7FFFFFFFFFFFFULL;
43078a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4308c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* -QNaN     : 1 0x7FF 0x7FFFFFFFFFFFF */
4309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
43108a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x7FFFFFFFFFFFFULL;
43128a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4313c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* +SNaN     : 0 0x7FF 0x8000000000000 */
4314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
43158a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x8000000000000ULL;
43178a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4318c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* -SNaN     : 1 0x7FF 0x8000000000000 */
4319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
43208a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x8000000000000ULL;
43228a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d fargs values\n", i);
4324c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
4325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_fargs = i;
4326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_iargs_table (void)
4329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t tmp;
4331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
4332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4333a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (arg_list_size == 1) {                   // Large
4335b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      iargs = malloc(400 * sizeof(HWord_t));
4336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = tmp + 1 + (tmp >> 1)) {
4337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x100000000ULL)
4338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFFFFFF;
4339b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         iargs[i++] = (HWord_t)tmp;
4340b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         AB_DPRINTF("val %08x\n", (HWord_t)tmp);
4341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFFFFFF)
4342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
4343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {                                    // Default
4345b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      iargs = malloc(10 * sizeof(HWord_t));
4346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // for (tmp = 0; ; tmp = 71*tmp + 1 + (tmp>>1)) {  // gives 8
4347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // for (tmp = 0; ; tmp = 100000*tmp + 1 + (tmp>>1)) {  // gives 4
4348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = 999999*tmp + 999999) {  // gives 3
4349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x100000000ULL)
4350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFFFFFF;
4351b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         iargs[i++] = (HWord_t)tmp;
4352b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         AB_DPRINTF("val %08x\n", (HWord_t)tmp);
4353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFFFFFF)
4354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
4355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4357a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
4358a2a583876ee4197d0284960aeb594dc75bce2f09cerion   if (arg_list_size == 1) {                   // Large
4359a2a583876ee4197d0284960aeb594dc75bce2f09cerion      iargs = malloc(800 * sizeof(HWord_t));
4360a2a583876ee4197d0284960aeb594dc75bce2f09cerion      for (tmp=0; ; tmp = 2*tmp + 1 + (tmp >> 2)) {
4361a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if ((long)tmp < 0 )
4362a2a583876ee4197d0284960aeb594dc75bce2f09cerion            tmp = 0xFFFFFFFFFFFFFFFFULL;
4363a2a583876ee4197d0284960aeb594dc75bce2f09cerion         iargs[i++] = tmp;
4364a2a583876ee4197d0284960aeb594dc75bce2f09cerion         AB_DPRINTF("val %016lx\n", tmp);
4365a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if (tmp == 0xFFFFFFFFFFFFFFFFULL)
4366a2a583876ee4197d0284960aeb594dc75bce2f09cerion            break;
4367a2a583876ee4197d0284960aeb594dc75bce2f09cerion      }
4368a2a583876ee4197d0284960aeb594dc75bce2f09cerion   } else {                                    // Default
4369a2a583876ee4197d0284960aeb594dc75bce2f09cerion      iargs = malloc(20 * sizeof(HWord_t));
4370a2a583876ee4197d0284960aeb594dc75bce2f09cerion      // for (tmp=0; ; tmp = 9999*tmp + 999999) {  // gives 6
4371a2a583876ee4197d0284960aeb594dc75bce2f09cerion      for (tmp = 0; ; tmp = 123456789*tmp + 123456789999) {  // gives 3
4372a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if ((long)tmp < 0 )
4373a2a583876ee4197d0284960aeb594dc75bce2f09cerion            tmp = 0xFFFFFFFFFFFFFFFFULL;
4374a2a583876ee4197d0284960aeb594dc75bce2f09cerion         iargs[i++] = tmp;
4375a2a583876ee4197d0284960aeb594dc75bce2f09cerion         AB_DPRINTF("val %016lx\n", tmp);
4376a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if (tmp == 0xFFFFFFFFFFFFFFFFULL)
4377a2a583876ee4197d0284960aeb594dc75bce2f09cerion            break;
4378a2a583876ee4197d0284960aeb594dc75bce2f09cerion      }
4379a2a583876ee4197d0284960aeb594dc75bce2f09cerion   }
4380a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifndef __powerpc64__
4381a2a583876ee4197d0284960aeb594dc75bce2f09cerion
4382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d iargs values\n", i);
4383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_iargs = i;
4384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_ii16_table (void)
4387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t tmp;
4389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
4390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (arg_list_size == 1) {                   // Large
4392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ii16 = malloc(200 * sizeof(uint32_t));
4393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = tmp + 1 + (tmp >> 2)) {
4394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x10000)
4395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFF;
4396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ii16[i++] = tmp;
4397b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         AB_DPRINTF("val %04x\n", tmp);
4398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFF)
4399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
4400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {                                    // Default
4402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ii16 = malloc(10 * sizeof(uint32_t));
4403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = 999*tmp + 999) {  // gives 3
4404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x10000)
4405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFF;
4406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ii16[i++] = tmp;
4407b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         AB_DPRINTF("val %04x\n", tmp);
4408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFF)
4409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
4410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d ii16 values\n", i);
4413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_ii16 = i;
4414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4416f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_viargs_table (void)
4418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (ALTIVEC_ARGS_LARGE)
4420f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int i=2;
442183b62cbbab29bde83eba40231f307c2a311e73c8njn   viargs = memalign16(i * sizeof(vector unsigned int));
4422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   viargs[0] = (vector unsigned int) { 0x01020304,0x05060708,0x090A0B0C,0x0E0D0E0F };
44238a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   AB_DPRINTF_VEC32x4( viargs[0] );
4424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   viargs[1] = (vector unsigned int) { 0xF1F2F3F4,0xF5F6F7F8,0xF9FAFBFC,0xFEFDFEFF };
44258a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   AB_DPRINTF_VEC32x4( viargs[1] );
4426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
4427f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int i,j;
4428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // build from iargs table (large/default already set)
4429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   viargs = malloc(nb_iargs * sizeof(vector unsigned int));
4430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4431f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      j = iargs[i];
4432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      viargs[i] = (vector unsigned int){ j, j*2, j*3, j*4 };
44338a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion      AB_DPRINTF_VEC32x4( viargs[i] );
4434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4436f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion
4437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d viargs values\n", i);
4438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_viargs = i;
4439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void register_vfarg (vector float* vfarg,
44428a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion                                  int s, uint8_t _exp, uint32_t mant)
4443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t tmp;
444581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj   vector uint32_t* vfargI = (vector uint32_t*)vfarg;
444681aab3c751b11fcfa6629b449c92bd7e3f459567sewardj
44478a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   tmp = ((uint64_t)s << 31) | ((uint64_t)_exp << 23) | mant;
444881aab3c751b11fcfa6629b449c92bd7e3f459567sewardj   *vfargI = (vector uint32_t){ tmp,tmp,tmp,tmp };
4449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("%d %02x %06x => %08x %0e\n",
44508a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion              s, _exp, mant, *((uint32_t*)&tmp), *(float*)&tmp);
4451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_vfargs_table (void)
4454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Sign goes from zero to one
4456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * Exponent goes from 0 to ((1 << 9) - 1)
4457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * Mantissa goes from 1 to ((1 << 24) - 1)
4458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * + special values:
44598f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * +0.0      : 0 0x00 0x000000            => 0x00000000
44608f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * -0.0      : 1 0x00 0x000000            => 0x80000000
44618f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * +infinity : 0 0xFF 0x000000            => 0x7F800000
44628f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * -infinity : 1 0xFF 0x000000            => 0xFF800000
44638f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * +SNaN     : 0 0xFF 0x7FFFFF (non-zero) => 0x7FFFFFFF
44648f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * -SNaN     : 1 0xFF 0x7FFFFF (non-zero) => 0xFFFFFFFF
44658f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * +QNaN     : 0 0xFF 0x3FFFFF (non-zero) => 0x7FBFFFFF
44668f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * -QNaN     : 1 0xFF 0x3FFFFF (non-zero) => 0xFFBFFFFF
4467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * (8 values)
4468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    */
4469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t mant;
44708a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   uint16_t _exp;
4471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int s;
4472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
4473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
447505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if !defined (ALTIVEC_ARGS_LARGE)
447605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   nb_vfargs = 12;
447783b62cbbab29bde83eba40231f307c2a311e73c8njn   vfargs = memalign16(nb_vfargs * sizeof(vector float));
4478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
447905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   // 4 values:
448005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (s=0; s<2; s++) {
44818a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion      for (_exp=0x5; ; _exp += 0x9D ) {
44828a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion         if (_exp > 0xDF)
448305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion            break;
448405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         for (mant = 0x3FFFFF; mant < 0x7FFFFF;
448505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion              mant = /* random */ ((mant + 0x1A6) << 31) + 0x159) {
44868a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion            register_vfarg(&vfargs[i++], s, (uint8_t)_exp, mant);
448705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         }
448805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
448905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
449005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#else
449105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   nb_vfargs = 50;
449283b62cbbab29bde83eba40231f307c2a311e73c8njn   vfargs = memalign16(nb_vfargs * sizeof(vector float));
449305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
449405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (s=0; s<2; s++) {
44958a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion      for (_exp=0x0; ; _exp += 0x3F ) {
44968a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion         //      for (_exp=0; ; _exp = ((_exp + 1) << 1) + 3) {
44978a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion         if (_exp >= 0xFE)
44988a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion            _exp = 0xFE;
449905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         for (mant = 0x0; mant < 0x7FFFFF;
450005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion              mant = /* random */ ((mant + 0x4A6) << 5) + 0x359) {
45018a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion            register_vfarg(&vfargs[i++], s, (uint8_t)_exp, mant);
450205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         }
45038a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion         if (_exp >= 0xFE)
450405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion            break;
450505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
450605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
450705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
450805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
4509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Special values */
4510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +0.0      : 0 0x00 0x000000 */
4511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
45128a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x00;
4513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
45148a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -0.0      : 1 0x00 0x000000 */
4516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
45178a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x00;
4518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
45198a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +infinity : 0 0xFF 0x000000  */
4522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
45238a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
4524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
45258a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -infinity : 1 0xFF 0x000000 */
4527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
45288a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
4529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
45308a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
45328a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   /* NaN: _exponent all 1s, non-zero fraction */
4533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* SNaN is a NaN with the most significant fraction bit clear.*/
45348f5fc19da719edcd8dfca920837bde7ce1d3accacerion   /* +SNaN     : 0 0xFF 0x7FFFFF */
4535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
45368a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
45378f5fc19da719edcd8dfca920837bde7ce1d3accacerion   mant = 0x7FFFFF;
45388a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
45398f5fc19da719edcd8dfca920837bde7ce1d3accacerion   /* -SNaN     : 1 0xFF 0x7FFFFF */
4540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
45418a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
45428f5fc19da719edcd8dfca920837bde7ce1d3accacerion   mant = 0x7FFFFF;
45438a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* QNaN is a NaN with the most significant fraction bit set */
45468f5fc19da719edcd8dfca920837bde7ce1d3accacerion   /* +QNaN     : 0 0xFF 0x3F0000 */
4547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
45488a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
45498f5fc19da719edcd8dfca920837bde7ce1d3accacerion   mant = 0x3FFFFF;
45508a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
45518f5fc19da719edcd8dfca920837bde7ce1d3accacerion   /* -QNaN     : 1 0xFF 0x3F0000 */
4552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
45538a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
45548f5fc19da719edcd8dfca920837bde7ce1d3accacerion   mant = 0x3FFFFF;
45558a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d vfargs values\n", i);
4557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
455805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   assert(i <= nb_vfargs);
455905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   nb_vfargs = i;
4560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
4564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_iargs (void)
4565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
4567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i = 0; i < nb_iargs; i++) {
4568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("iarg %d: %08x %08x %08x\n", i, iargs[i],
4569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             (unsigned int)&iargs[i], (unsigned int)iargs);
4570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_iargs16 (void)
4574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
4576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i = 0; i < nb_ii16; i++) {
4577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("iarg16 %d: %08x %08x %08x\n", i, ii16[i],
4578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             (unsigned int)&ii16[i], (unsigned int)ii16);
4579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_vfargs (void)
4583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4584f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   vector float vf;
4585f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   float f;
4586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
4587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
4588f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vf = (vector float)vfargs[i];
4589f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      f  = ((float*)&vf)[0];
4590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("vfarg %3d: %24f : %08x\n", i, f, ((unsigned int*)&f)[0]);
4591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4595530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_three_args (const char* name, test_func_t func,
4596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 unused uint32_t test_flags)
4597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
459852675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
45995f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
4600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k;
4601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
4604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_iargs; k++) {
4605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r14 = iargs[i];
4606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r15 = iargs[j];
4607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r16 = iargs[k];
4608b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
46095f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj	    SET_CR_XER_ZERO;
4610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
46115f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj	    GET_CR_XER(flags,xer);
4612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            res = r17;
4613b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4614a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n",
4616a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
46172762a738523d6f37cab30c4b1fae6a30414a81f6sewardj            printf("%s %016llx, %016llx, %016llx => %016llx (%08x %08x)\n",
4618a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   name, iargs[i], iargs[j], iargs[k], res, flags, xer);
4620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
4621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
4622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4626530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_two_args (const char* name, test_func_t func,
4627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                               uint32_t test_flags)
4628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
462952675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
46305f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer, xer_orig;
4631b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   int i, j, is_div, zap_hi32;
4632664c85989cc01a6885489b299d849eecab53abbesewardj
4633664c85989cc01a6885489b299d849eecab53abbesewardj   // catches div, divwu, divo, divwu, divwuo, and . variants
463452675269f43c06380b04bf502c509cca4ee643b6cerion   is_div = strstr(name, "divw") != NULL;
4635b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4636b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   zap_hi32 = strstr(name, "mulhw") != NULL;
4637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   xer_orig = 0x00000000;
4639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj redo:
4640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
46425f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
4643664c85989cc01a6885489b299d849eecab53abbesewardj         /* result of division by zero is implementation dependent.
4644664c85989cc01a6885489b299d849eecab53abbesewardj            don't test it. */
4645664c85989cc01a6885489b299d849eecab53abbesewardj         if (is_div && iargs[j] == 0)
4646664c85989cc01a6885489b299d849eecab53abbesewardj            continue;
4647b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
46485f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         r14 = iargs[i];
46495f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         r15 = iargs[j];
4650b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
46515f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_XER(xer_orig);
46525f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_CR_ZERO;
4653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
46545f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR_XER(flags,xer);
4655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = r17;
4656b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4657a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %08x, %08x => %08x (%08x %08x)\n",
4659a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
4660a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if (zap_hi32) res &= 0xFFFFFFFFULL;
46612762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %016llx, %016llx => %016llx (%08x %08x)\n",
4662a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, iargs[i], iargs[j], res, flags, xer);
4664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
4666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4667664c85989cc01a6885489b299d849eecab53abbesewardj   if ((test_flags & PPC_XER_CA) && xer_orig == 0x00000000) {
4668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer_orig = 0x20000000;
4669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      goto redo;
4670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4673530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_one_arg (const char* name, test_func_t func,
4674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                               uint32_t test_flags)
4675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
467652675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
46775f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer, xer_orig;
4678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
4679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   xer_orig = 0x00000000;
4681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj redo:
4682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[i];
46845f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_XER(xer_orig);
46855f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_ZERO;
4686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
4687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
46885f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
4689b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4690a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %08x => %08x (%08x %08x)\n",
4692a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
46932762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx => %016llx (%08x %08x)\n",
4694a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, iargs[i], res, flags, xer);
4696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4697664c85989cc01a6885489b299d849eecab53abbesewardj   if ((test_flags & PPC_XER_CA) && xer_orig == 0x00000000) {
4698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer_orig = 0x20000000;
4699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      goto redo;
4700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void invalidate_icache ( void *ptr, int nbytes )
4704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
470552675269f43c06380b04bf502c509cca4ee643b6cerion   HWord_t startaddr = (HWord_t) ptr;
470652675269f43c06380b04bf502c509cca4ee643b6cerion   HWord_t endaddr   = startaddr + nbytes;
470752675269f43c06380b04bf502c509cca4ee643b6cerion   HWord_t cls       = 32; /*VG_(cache_line_size_ppc32);*/
470852675269f43c06380b04bf502c509cca4ee643b6cerion   HWord_t addr;
4709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   startaddr &= ~(cls - 1);
4711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (addr = startaddr; addr < endaddr; addr += cls)
4712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      asm volatile("dcbst 0,%0" : : "r" (addr));
4713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   asm volatile("sync");
4714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (addr = startaddr; addr < endaddr; addr += cls)
4715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      asm volatile("icbi 0,%0" : : "r" (addr));
4716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   asm volatile("sync; isync");
4717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* for god knows what reason, if this isn't inlined, the
4720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   program segfaults. */
472152675269f43c06380b04bf502c509cca4ee643b6cerionstatic inline
472252675269f43c06380b04bf502c509cca4ee643b6cerionvoid _patch_op_imm (uint32_t *p_insn, uint16_t imm, int sh, int len)
4723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
472452675269f43c06380b04bf502c509cca4ee643b6cerion   uint32_t mask = ((1 << len) - 1) << sh;
472552675269f43c06380b04bf502c509cca4ee643b6cerion   *p_insn = (*p_insn & ~mask) | ((imm<<sh) & mask);
4726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
472852675269f43c06380b04bf502c509cca4ee643b6cerionstatic inline
472952675269f43c06380b04bf502c509cca4ee643b6cerionvoid patch_op_imm (uint32_t* p_insn, uint16_t imm, int sh, int len)
4730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
473152675269f43c06380b04bf502c509cca4ee643b6cerion   _patch_op_imm(p_insn, imm, sh, len);
473252675269f43c06380b04bf502c509cca4ee643b6cerion   invalidate_icache(p_insn, 4);
473352675269f43c06380b04bf502c509cca4ee643b6cerion}
473452675269f43c06380b04bf502c509cca4ee643b6cerion
473552675269f43c06380b04bf502c509cca4ee643b6cerionstatic inline
473652675269f43c06380b04bf502c509cca4ee643b6cerionvoid patch_op_imm16 (uint32_t *p_insn, uint16_t imm)
473752675269f43c06380b04bf502c509cca4ee643b6cerion{
473852675269f43c06380b04bf502c509cca4ee643b6cerion   patch_op_imm(p_insn, imm, 0, 16);
4739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
474152675269f43c06380b04bf502c509cca4ee643b6cerion
47427c01859c190613f313f57fc4b1c6bb14124b00c7sewardj/* Copy the 2 insn function starting at p_func_F to func_buf[], and
47437c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   return a possibly different pointer, which, when called, runs the
47447c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   copy in func_buf[]. */
474552675269f43c06380b04bf502c509cca4ee643b6cerionstatic inline
47467c01859c190613f313f57fc4b1c6bb14124b00c7sewardjtest_func_t init_function( test_func_t p_func_F, uint32_t func_buf[] )
4747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
47487c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* p_func = (uint32_t*)p_func_F;
4749a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
47507c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   func_buf[0] = p_func[0];
47517c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   func_buf[1] = p_func[1];
47527c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   return (test_func_t)&func_buf[0];
4753a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
47547c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   /* p_func points to a function descriptor, the first word of which
47557c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      points to the real code.  Copy the code itself but not the
47567c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      descriptor, and just swizzle the descriptor's entry pointer. */
47577c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint64_t* descr = (uint64_t*)p_func;
47587c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* entry = (uint32_t*)(descr[0]);
47597c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   func_buf[0] = entry[0];
47607c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   func_buf[1] = entry[1];
47617c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   descr[0] = (uint64_t)&func_buf[0];
47627c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   return (test_func_t)descr;
4763a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifndef __powerpc64__
4764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
476652675269f43c06380b04bf502c509cca4ee643b6cerion
4767530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_one_reg_imm16 (const char* name,
47687c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                                    test_func_t func_IN,
4769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
4770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
47717c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
47727c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
477352675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
47745f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
4775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
477652675269f43c06380b04bf502c509cca4ee643b6cerion
4777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_ii16; j++) {
477952675269f43c06380b04bf502c509cca4ee643b6cerion         /* Patch up the instruction */
47807c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
478152675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm16(&func_buf[0], ii16[j]);
478252675269f43c06380b04bf502c509cca4ee643b6cerion
4783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = iargs[i];
4784b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
47855f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_CR_XER_ZERO;
4786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
47875f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR_XER(flags,xer);
4788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = r17;
4789b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4790a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %08x, %08x => %08x (%08x %08x)\n",
4792a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
47932762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %016llx, %08x => %016llx (%08x %08x)\n",
4794a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, iargs[i], ii16[j], res, flags, xer);
4796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
4798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Special test cases for:
4802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwimi
4803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwinm
4804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwnm
4805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * srawi
4806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrf
4807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrfs
4808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrxr_cb
4809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mfcr_cb
4810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mfspr_cb
4811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mftb_cb
4812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtcrf_cb
4813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtspr_cb
4814a2a583876ee4197d0284960aeb594dc75bce2f09cerion
4815a2a583876ee4197d0284960aeb594dc75bce2f09cerion __powerpc64__ only:
4816a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldcl       rA,rS,SH,MB
4817a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldcr       rA,rS,SH,ME
4818a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldic       rA,rS,SH,MB
4819a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldicl      rA,rS,SH,MB
4820a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldicr      rA,rS,SH,ME
4821a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldimi      rA,rS,SH,MB
4822a2a583876ee4197d0284960aeb594dc75bce2f09cerion * sradi       rA,rS,SH
4823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
4824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
48257c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void rlwi_cb (const char* name, test_func_t func_IN,
4826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                     unused uint32_t test_flags)
4827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
48287c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
48297c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
483052675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
48315f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
483252675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, k, l, arg_step;
4833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
483452675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = (arg_list_size == 0) ? 31 : 3;
4835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4836b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   r17 = 0;  // rlwimi takes r17 as input: start with a clean slate.
4837b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<32; j+=arg_step) {
4840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<32; k+=arg_step) {
4841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            for (l=0; l<32; l+=arg_step) {
484252675269f43c06380b04bf502c509cca4ee643b6cerion               /* Patch up the instruction */
48437c01859c190613f313f57fc4b1c6bb14124b00c7sewardj               func = init_function( func_IN, func_buf );
484452675269f43c06380b04bf502c509cca4ee643b6cerion               _patch_op_imm(&func_buf[0], j, 11, 5);
484552675269f43c06380b04bf502c509cca4ee643b6cerion               _patch_op_imm(&func_buf[0], k, 6, 5);
484652675269f43c06380b04bf502c509cca4ee643b6cerion               patch_op_imm(&func_buf[0], l, 1, 5);
484752675269f43c06380b04bf502c509cca4ee643b6cerion
4848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r14 = iargs[i];
484952675269f43c06380b04bf502c509cca4ee643b6cerion
48505f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj               SET_CR_XER_ZERO;
4851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               (*func)();
48525f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj               GET_CR_XER(flags,xer);
4853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               res = r17;
485452675269f43c06380b04bf502c509cca4ee643b6cerion
4855a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
485652675269f43c06380b04bf502c509cca4ee643b6cerion               printf("%s %08x, %2d, %2d, %2d => %08x (%08x %08x)\n",
4857a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
48582762a738523d6f37cab30c4b1fae6a30414a81f6sewardj               printf("%s %016llx, %2d, %2d, %2d => %016llx (%08x %08x)\n",
4859a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      name, iargs[i], j, k, l, res, flags, xer);
4861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
4862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            if (verbose) printf("\n");
4863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
4864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
48687c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void rlwnm_cb (const char* name, test_func_t func_IN,
4869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
48717c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
48727c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
487352675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
48745f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
487552675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, k, l, arg_step;
4876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
487752675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = (arg_list_size == 0) ? 31 : 3;
4878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
4881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<32; k+=arg_step) {
4882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            for (l=0; l<32; l+=arg_step) {
488352675269f43c06380b04bf502c509cca4ee643b6cerion               /* Patch up the instruction */
48847c01859c190613f313f57fc4b1c6bb14124b00c7sewardj               func = init_function( func_IN, func_buf );
488552675269f43c06380b04bf502c509cca4ee643b6cerion               _patch_op_imm(&func_buf[0], k, 6, 5);
488652675269f43c06380b04bf502c509cca4ee643b6cerion               patch_op_imm(&func_buf[0], l, 1, 5);
488752675269f43c06380b04bf502c509cca4ee643b6cerion
4888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r14 = iargs[i];
4889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r15 = iargs[j];
489052675269f43c06380b04bf502c509cca4ee643b6cerion
48915f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj               SET_CR_XER_ZERO;
4892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               (*func)();
48935f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj               GET_CR_XER(flags,xer);
4894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               res = r17;
489552675269f43c06380b04bf502c509cca4ee643b6cerion
4896a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
489752675269f43c06380b04bf502c509cca4ee643b6cerion               printf("%s %08x, %08x, %2d, %2d => %08x (%08x %08x)\n",
4898a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
48992762a738523d6f37cab30c4b1fae6a30414a81f6sewardj               printf("%s %016llx, %016llx, %2d, %2d => %016llx (%08x %08x)\n",
4900a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      name, iargs[i], iargs[j], k, l, res, flags, xer);
4902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
4903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            if (verbose) printf("\n");
4904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
4905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
49097c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void srawi_cb (const char* name, test_func_t func_IN,
4910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
49127c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
49137c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
491452675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
49155f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
491652675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, arg_step;
4917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
491852675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = (arg_list_size == 0) ? 31 : 1;
4919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<32; j+=arg_step) {
492252675269f43c06380b04bf502c509cca4ee643b6cerion         /* Patch up the instruction */
49237c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
492452675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm(&func_buf[0], j, 11, 5);
492552675269f43c06380b04bf502c509cca4ee643b6cerion
4926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = iargs[i];
492752675269f43c06380b04bf502c509cca4ee643b6cerion
49285f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_CR_XER_ZERO;
4929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
49305f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR_XER(flags,xer);
4931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = r17;
493252675269f43c06380b04bf502c509cca4ee643b6cerion
4933a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
493452675269f43c06380b04bf502c509cca4ee643b6cerion         printf("%s %08x, %2d => %08x (%08x %08x)\n",
4935a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
49362762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %016llx, %2d => %016llx (%08x %08x)\n",
4937a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, iargs[i], j, res, flags, xer);
4939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
4941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
49447c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void mcrf_cb (const char* name, test_func_t func_IN,
4945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
49477c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
49487c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
49495f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
495052675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, k, arg_step;
4951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
495252675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = (arg_list_size == 0) ? 7 : 1;
4953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<8; j+=arg_step) {
4956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<8; k+=arg_step) {
495752675269f43c06380b04bf502c509cca4ee643b6cerion            /* Patch up the instruction */
49587c01859c190613f313f57fc4b1c6bb14124b00c7sewardj            func = init_function( func_IN, func_buf );
495952675269f43c06380b04bf502c509cca4ee643b6cerion            _patch_op_imm(&func_buf[0], j, 23, 3);
496052675269f43c06380b04bf502c509cca4ee643b6cerion            patch_op_imm(&func_buf[0], k, 18, 3);
496152675269f43c06380b04bf502c509cca4ee643b6cerion
4962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r14 = iargs[i];
496352675269f43c06380b04bf502c509cca4ee643b6cerion
49645f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            SET_CR(r14);
49655f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            SET_XER_ZERO;
4966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
49675f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            GET_CR_XER(flags,xer);
4968b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4969a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s %d, %d (%08x) => (%08x %08x)\n",
4971a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
49722762a738523d6f37cab30c4b1fae6a30414a81f6sewardj            printf("%s %d, %d (%016llx) => (%08x %08x)\n",
4973a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   name, j, k, iargs[i], flags, xer);
4975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
4976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
4977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
49817c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void mcrxr_cb (const char* name, test_func_t func_IN,
4982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
49847c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
49857c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
49865f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
498752675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, k, arg_step;
4988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
498952675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = 1; //(arg_list_size == 0) ? 7 : 1;
4990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<16; i+=arg_step) {
4992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      j = i << 28;
4993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (k=0; k<8; k+=arg_step) {
499452675269f43c06380b04bf502c509cca4ee643b6cerion         /* Patch up the instruction */
49957c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
499652675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm(&func_buf[0], k, 23, 3);
499752675269f43c06380b04bf502c509cca4ee643b6cerion
4998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = j;
499952675269f43c06380b04bf502c509cca4ee643b6cerion
50005f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj	 SET_CR_ZERO;
50015f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj	 SET_XER(r14);
5002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
50035f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR_XER(flags,xer);
5004b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %d (%08x) => (%08x %08x)\n",
5006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, k, j, flags, xer);
5007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
5009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5012530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mfcr_cb (const char* name, test_func_t func,
5013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                     unused uint32_t test_flags)
5014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
501552675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
50165f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
5018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[i];
5021b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
50235f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR(r14);
50245f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_XER_ZERO;
5025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
50265f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
5028b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5029a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s (%08x) => %08x (%08x %08x)\n",
5031a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
50322762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s (%016llx) => %016llx (%08x %08x)\n",
5033a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, iargs[i], res, flags, xer);
5035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// NOTE: Not using func: calling function kills lr
5039530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mfspr_cb (const char* name, test_func_t func,
5040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5042fdeaa95698883fa09d0abefa4511cfab6466e316sewardj   //volatile uint32_t res, flags, xer, ctr, lr, tmpcr, tmpxer;
5043b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   volatile HWord_t res;
5044b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   int j, k;
504552675269f43c06380b04bf502c509cca4ee643b6cerion   func = func; // just to stop compiler complaining
5046b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5047941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   // mtxer followed by mfxer
5048941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   for (k=0; k<nb_iargs; k++) {
5049941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      j = iargs[k];
5050941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      __asm__ __volatile__(
5051941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "mtxer %1\n"
5052941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "\tmfxer %0"
50535f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         : /*out*/"=b"(res) : /*in*/"b"(j) : /*trashed*/"xer"
5054941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      );
5055941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      res &= 0xE000007F; /* rest of the bits are undefined */
5056b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5057a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
505852675269f43c06380b04bf502c509cca4ee643b6cerion      printf("%s 1 (%08x) -> mtxer -> mfxer => %08x\n",
5059a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
50602762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s 1 (%08x) -> mtxer -> mfxer => %016llx\n",
5061a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5062941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj             name, j, res);
5063941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   }
5064941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj
5065941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   // mtlr followed by mflr
5066941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   for (k=0; k<nb_iargs; k++) {
5067941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      j = iargs[k];
5068941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      __asm__ __volatile__(
5069941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "mtlr %1\n"
5070941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "\tmflr %0"
50715f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         : /*out*/"=b"(res) : /*in*/"b"(j) : /*trashed*/"lr"
5072941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      );
5073b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5074a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
507552675269f43c06380b04bf502c509cca4ee643b6cerion      printf("%s 8 (%08x) ->  mtlr ->  mflr => %08x\n",
5076a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
50772762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s 8 (%08x) ->  mtlr ->  mflr => %016llx\n",
5078a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5079941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj             name, j, res);
5080941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   }
5081941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj
5082941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   // mtctr followed by mfctr
5083941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   for (k=0; k<nb_iargs; k++) {
5084941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      j = iargs[k];
5085941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      __asm__ __volatile__(
5086941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "mtctr %1\n"
5087941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "\tmfctr %0"
50885f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         : /*out*/"=b"(res) : /*in*/"b"(j) : /*trashed*/"ctr"
5089941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      );
5090b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5091a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
509252675269f43c06380b04bf502c509cca4ee643b6cerion      printf("%s 9 (%08x) -> mtctr -> mfctr => %08x\n",
5093a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
50942762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s 9 (%08x) -> mtctr -> mfctr => %016llx\n",
5095a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5096941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj             name, j, res);
5097941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   }
5098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
51007c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void mtcrf_cb (const char* name, test_func_t func_IN,
5101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
51037c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
51047c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
51055f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
510652675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, arg_step;
5107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
510852675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = (arg_list_size == 0) ? 99 : 1;
5109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<256; j+=arg_step) {
511252675269f43c06380b04bf502c509cca4ee643b6cerion         /* Patch up the instruction */
51137c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
511452675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm(&func_buf[0], j, 12, 8);
511552675269f43c06380b04bf502c509cca4ee643b6cerion
5116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = iargs[i];
511752675269f43c06380b04bf502c509cca4ee643b6cerion
51185f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_CR_XER_ZERO;
5119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
51205f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR_XER(flags,xer);
5121b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5122a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
512352675269f43c06380b04bf502c509cca4ee643b6cerion         printf("%s %3d, %08x => (%08x %08x)\n",
5124a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
51252762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %3d, %016llx => (%08x %08x)\n",
5126a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, j, iargs[i], flags, xer);
5128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
5130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// NOTE: Not using func: calling function kills lr
5134530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mtspr_cb (const char* name, test_func_t func,
5135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5139a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
51407c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void rldc_cb (const char* name, test_func_t func_IN,
5141a2a583876ee4197d0284960aeb594dc75bce2f09cerion                     unused uint32_t test_flags)
5142a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
51437c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
51447c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
5145a2a583876ee4197d0284960aeb594dc75bce2f09cerion   volatile HWord_t res;
5146e1494c6807bd1744d615ce52d97599168eddb2edsewardj   volatile uint32_t flags, xer;
5147a2a583876ee4197d0284960aeb594dc75bce2f09cerion   int i, j, k, arg_step;
5148a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5149a2a583876ee4197d0284960aeb594dc75bce2f09cerion   arg_step = (arg_list_size == 0) ? 7 : 3;
5150a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5151a2a583876ee4197d0284960aeb594dc75bce2f09cerion   for (i=0; i<nb_iargs; i++) {
5152a2a583876ee4197d0284960aeb594dc75bce2f09cerion      for (j=0; j<nb_iargs; j++) {
5153a2a583876ee4197d0284960aeb594dc75bce2f09cerion         for (k=0; k<64; k+=arg_step) {
5154a2a583876ee4197d0284960aeb594dc75bce2f09cerion            /* Patch up the instruction */
51557c01859c190613f313f57fc4b1c6bb14124b00c7sewardj            func = init_function( func_IN, func_buf );
5156a2a583876ee4197d0284960aeb594dc75bce2f09cerion            patch_op_imm(&func_buf[0], (((k & 0x1F)<<1) | ((k>>5)&1)), 5, 6);
5157a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5158a2a583876ee4197d0284960aeb594dc75bce2f09cerion            r14 = iargs[i];
5159a2a583876ee4197d0284960aeb594dc75bce2f09cerion            r15 = iargs[j];
5160a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5161e1494c6807bd1744d615ce52d97599168eddb2edsewardj            SET_CR_XER_ZERO;
5162a2a583876ee4197d0284960aeb594dc75bce2f09cerion            (*func)();
5163e1494c6807bd1744d615ce52d97599168eddb2edsewardj            GET_CR_XER(flags,xer);
5164a2a583876ee4197d0284960aeb594dc75bce2f09cerion            res = r17;
5165a2a583876ee4197d0284960aeb594dc75bce2f09cerion
51662762a738523d6f37cab30c4b1fae6a30414a81f6sewardj            printf("%s %016llx, %016llx, %2d => %016llx (%08x %08x)\n",
5167a2a583876ee4197d0284960aeb594dc75bce2f09cerion                   name, iargs[i], iargs[j], k, res, flags, xer);
5168a2a583876ee4197d0284960aeb594dc75bce2f09cerion         }
5169a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if (verbose) printf("\n");
5170a2a583876ee4197d0284960aeb594dc75bce2f09cerion      }
5171a2a583876ee4197d0284960aeb594dc75bce2f09cerion   }
5172a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
5173a2a583876ee4197d0284960aeb594dc75bce2f09cerion
51747c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void rldi_cb (const char* name, test_func_t func_IN,
5175a2a583876ee4197d0284960aeb594dc75bce2f09cerion                     unused uint32_t test_flags)
5176a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
51777c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
51787c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
5179a2a583876ee4197d0284960aeb594dc75bce2f09cerion   volatile HWord_t res;
5180e1494c6807bd1744d615ce52d97599168eddb2edsewardj   volatile uint32_t flags, xer;
5181a2a583876ee4197d0284960aeb594dc75bce2f09cerion   int i, j, k, arg_step;
5182a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5183a2a583876ee4197d0284960aeb594dc75bce2f09cerion   arg_step = (arg_list_size == 0) ? 7 : 3;
5184a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5185a2a583876ee4197d0284960aeb594dc75bce2f09cerion   for (i=0; i<nb_iargs; i++) {
5186a2a583876ee4197d0284960aeb594dc75bce2f09cerion      for (j=0; j<64; j+=arg_step) {     // SH
5187a2a583876ee4197d0284960aeb594dc75bce2f09cerion         for (k=0; k<64; k+=arg_step) {  // MB|ME
5188a2a583876ee4197d0284960aeb594dc75bce2f09cerion            /* Patch up the instruction */
51897c01859c190613f313f57fc4b1c6bb14124b00c7sewardj            func = init_function( func_IN, func_buf );
5190a2a583876ee4197d0284960aeb594dc75bce2f09cerion            _patch_op_imm(&func_buf[0], (j & 0x1F), 11, 5);
5191a2a583876ee4197d0284960aeb594dc75bce2f09cerion            _patch_op_imm(&func_buf[0], ((j>>5)&1), 1, 1);
5192a2a583876ee4197d0284960aeb594dc75bce2f09cerion            patch_op_imm(&func_buf[0], (((k & 0x1F)<<1) | ((k>>5)&1)), 5, 6);
5193a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5194a2a583876ee4197d0284960aeb594dc75bce2f09cerion            r14 = iargs[i];
5195a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5196e1494c6807bd1744d615ce52d97599168eddb2edsewardj            SET_CR_XER_ZERO;
5197a2a583876ee4197d0284960aeb594dc75bce2f09cerion            (*func)();
5198e1494c6807bd1744d615ce52d97599168eddb2edsewardj            GET_CR_XER(flags,xer);
5199a2a583876ee4197d0284960aeb594dc75bce2f09cerion            res = r17;
5200a2a583876ee4197d0284960aeb594dc75bce2f09cerion
52012762a738523d6f37cab30c4b1fae6a30414a81f6sewardj            printf("%s %016llx, %2d, %2d => %016llx (%08x %08x)\n",
5202a2a583876ee4197d0284960aeb594dc75bce2f09cerion                   name, iargs[i], j, k, res, flags, xer);
5203a2a583876ee4197d0284960aeb594dc75bce2f09cerion         }
5204a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if (verbose) printf("\n");
5205a2a583876ee4197d0284960aeb594dc75bce2f09cerion      }
5206a2a583876ee4197d0284960aeb594dc75bce2f09cerion   }
5207a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
5208a2a583876ee4197d0284960aeb594dc75bce2f09cerion
52097c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void sradi_cb (const char* name, test_func_t func_IN,
5210a2a583876ee4197d0284960aeb594dc75bce2f09cerion                      unused uint32_t test_flags)
5211a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
52127c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
52137c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
5214a2a583876ee4197d0284960aeb594dc75bce2f09cerion   volatile HWord_t res;
5215e1494c6807bd1744d615ce52d97599168eddb2edsewardj   volatile uint32_t flags, xer;
5216a2a583876ee4197d0284960aeb594dc75bce2f09cerion   int i, j, arg_step;
5217a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5218a2a583876ee4197d0284960aeb594dc75bce2f09cerion   arg_step = (arg_list_size == 0) ? 7 : 3;
5219a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5220a2a583876ee4197d0284960aeb594dc75bce2f09cerion   for (i=0; i<nb_iargs; i++) {
5221a2a583876ee4197d0284960aeb594dc75bce2f09cerion      for (j=0; j<64; j+=arg_step) {     // SH
5222a2a583876ee4197d0284960aeb594dc75bce2f09cerion         /* Patch up the instruction */
52237c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
5224a2a583876ee4197d0284960aeb594dc75bce2f09cerion         _patch_op_imm(&func_buf[0], (j & 0x1F), 11, 5);
5225a2a583876ee4197d0284960aeb594dc75bce2f09cerion         patch_op_imm(&func_buf[0], ((j>>5)&1), 1, 1);
5226a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5227a2a583876ee4197d0284960aeb594dc75bce2f09cerion         r14 = iargs[i];
5228a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5229e1494c6807bd1744d615ce52d97599168eddb2edsewardj         SET_CR_XER_ZERO;
5230a2a583876ee4197d0284960aeb594dc75bce2f09cerion         (*func)();
5231e1494c6807bd1744d615ce52d97599168eddb2edsewardj         GET_CR_XER(flags,xer);
5232a2a583876ee4197d0284960aeb594dc75bce2f09cerion         res = r17;
5233a2a583876ee4197d0284960aeb594dc75bce2f09cerion
52342762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %016llx, %2d => %016llx (%08x %08x)\n",
5235a2a583876ee4197d0284960aeb594dc75bce2f09cerion                name, iargs[i], j, res, flags, xer);
5236a2a583876ee4197d0284960aeb594dc75bce2f09cerion      }
5237a2a583876ee4197d0284960aeb594dc75bce2f09cerion      if (verbose) printf("\n");
5238a2a583876ee4197d0284960aeb594dc75bce2f09cerion   }
5239a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
5240a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
5241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct special_t special_t;
5244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct special_t {
5246530f73578552bc876a51fbf90cb6be29769bb362sewardj   const char *name;
5247530f73578552bc876a51fbf90cb6be29769bb362sewardj   void (*test_cb)(const char* name, test_func_t func,
5248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   unused uint32_t test_flags);
5249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_special (special_t *table,
5252530f73578552bc876a51fbf90cb6be29769bb362sewardj                          const char* name, test_func_t func,
5253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                          unused uint32_t test_flags)
5254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5255530f73578552bc876a51fbf90cb6be29769bb362sewardj   const char *tmp;
5256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
5257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (tmp = name; isspace(*tmp); tmp++)
5259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      continue;
5260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; table[i].name != NULL; i++) {
5261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
5262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fprintf(stderr, "look for handler for '%s' (%s)\n", name,
5263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj              table[i].name);
5264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (strcmp(table[i].name, tmp) == 0) {
5266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*table[i].test_cb)(name, func, test_flags);
5267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return;
5268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   fprintf(stderr, "ERROR: no test found for op '%s'\n", name);
5271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_int_ops[] = {
5274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwimi", /* One register + 3 5 bits immediate arguments */
5276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
5277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwimi.", /* One register + 3 5 bits immediate arguments */
5280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
5281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwinm", /* One register + 3 5 bits immediate arguments */
5284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
5285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwinm.", /* One register + 3 5 bits immediate arguments */
5288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
5289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwnm",  /* Two registers + 2 5 bits immediate arguments */
5292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwnm_cb,
5293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwnm.",  /* Two registers + 2 5 bits immediate arguments */
5296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwnm_cb,
5297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "srawi",  /* One register + 1 5 bits immediate arguments */
5300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &srawi_cb,
5301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "srawi.",  /* One register + 1 5 bits immediate arguments */
5304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &srawi_cb,
5305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mcrf",  /* 2 3 bits immediate arguments */
5308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mcrf_cb,
5309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
5311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mcrfs",  /* 2 3 bits immediate arguments */
5313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mcrfs_cb,
5314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mcrxr",  /* 1 3 bits immediate argument */
5318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mcrxr_cb,
5319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mfcr",  /* No arguments */
5322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mfcr_cb,
5323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mfspr",  /* 1 10 bits immediate argument */
5326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mfspr_cb,
5327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
5329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {   // Move from time base
5330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mftb",  /* 1 10 bits immediate arguments */
5331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mftb_cb,
5332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtcrf",  /* One register + 1 8 bits immediate arguments */
5336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtcrf_cb,
5337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtspr",  /* One register + 1 10 bits immediate arguments */
5340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtspr_cb,
5341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5342a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
5343a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5344a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldcl",   /* Two registers + 1 6 bit immediate argument */
5345a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldc_cb,
5346a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5347a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5348a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldcl.",  /* Two registers + 1 6 bit immediate argument */
5349a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldc_cb,
5350a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5351a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5352a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldcr",   /* Two registers + 1 6 bit immediate argument */
5353a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldc_cb,
5354a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5355a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5356a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldcr.",  /* Two registers + 1 6 bit immediate argument */
5357a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldc_cb,
5358a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5359a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5360a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldic",   /* One register + 2 6 bit immediate arguments */
5361a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5362a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5363a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5364a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldic.",  /* One register + 2 6 bit immediate arguments */
5365a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5366a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5367a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5368a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldicl",  /* One register + 2 6 bit immediate arguments */
5369a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5370a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5371a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5372a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldicl.", /* One register + 2 6 bit immediate arguments */
5373a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5374a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5375a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5376a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldicr",  /* One register + 2 6 bit immediate arguments */
5377a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5378a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5379a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5380a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldicr.", /* One register + 2 6 bit immediate arguments */
5381a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5382a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5383a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5384a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldimi",  /* One register + 2 6 bit immediate arguments */
5385a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5386a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5387a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5388a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldimi.", /* One register + 2 6 bit immediate arguments */
5389a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5390a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5391a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5392a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "sradi",  /* One register + 1 6 bit immediate argument */
5393a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &sradi_cb,
5394a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5395a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5396a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "sradi.", /* One register + 1 6 bit immediate argument */
5397a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &sradi_cb,
5398a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5399a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
5400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
5402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
5403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5406530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_special (const char* name, test_func_t func,
5407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                              uint32_t test_flags)
5408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_special(special_int_ops, name, func, test_flags);
5410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5413530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_ld_one_reg_imm16 (const char* name,
54147c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                                       test_func_t func_IN,
5415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                       unused uint32_t test_flags)
5416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
54177c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
54187c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
5419b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   volatile HWord_t res, base;
54205f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5421a2a583876ee4197d0284960aeb594dc75bce2f09cerion   int i, offs, is_lwa=0;
5422a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5423a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
5424a2a583876ee4197d0284960aeb594dc75bce2f09cerion   is_lwa = strstr(name, "lwa") != NULL;
5425a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5426b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // +ve d
5428b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs[0];
5429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5430b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * sizeof(HWord_t);
543152675269f43c06380b04bf502c509cca4ee643b6cerion
543252675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
54337c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func_IN, func_buf );
5434a2a583876ee4197d0284960aeb594dc75bce2f09cerion      if (is_lwa)
5435a2a583876ee4197d0284960aeb594dc75bce2f09cerion         patch_op_imm(&func_buf[0], offs>>2, 2, 14);
5436a2a583876ee4197d0284960aeb594dc75bce2f09cerion      else
5437a2a583876ee4197d0284960aeb594dc75bce2f09cerion         patch_op_imm16(&func_buf[0], offs);
543852675269f43c06380b04bf502c509cca4ee643b6cerion
5439b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = base;
5440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
54415f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
54435f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
5445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5446a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5447b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %2d, (%08x) => %08x, %2d (%08x %08x)\n",
5448a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
54492762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %3d, (%016llx) => %016llx, %3lld (%08x %08x)\n",
5450a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5451b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, offs, iargs[i], res, r14-base, flags, xer);
5452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose) printf("\n");
5454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // -ve d
5456b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs[nb_iargs-1];
5457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i = -nb_iargs+1; i<=0; i++) {
5458b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * sizeof(HWord_t);
545952675269f43c06380b04bf502c509cca4ee643b6cerion
546052675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
54617c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func, func_buf );
5462b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      patch_op_imm16(&func_buf[0], offs);
546352675269f43c06380b04bf502c509cca4ee643b6cerion
5464b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = base;
5465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
54665f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
54685f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
5470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5471a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5472b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %2d, (%08x) => %08x, %2d (%08x %08x)\n",
5473a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
54742762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %3d, (%016llx) => %016llx, %3lld (%08x %08x)\n",
5475a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5476b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, offs, iargs[nb_iargs-1+i], res, r14-base, flags, xer);
5477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5480530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_ld_two_regs (const char* name,
5481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  test_func_t func,
5482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  unused uint32_t test_flags)
5483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5484b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   volatile HWord_t res, base;
54855f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5486b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   int i, offs;
5487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // +ve d
5489b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs[0];
5490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5491b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * sizeof(HWord_t);
5492b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = base;
5493b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r15 = offs;
5494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
54955f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
54975f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
5499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5500a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5501b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %d (%08x) => %08x, %d (%08x %08x)\n",
5502a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
55032762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %3d, (%016llx) => %016llx, %2lld (%08x %08x)\n",
5504a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5505b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, offs, iargs[i], res, r14-base, flags, xer);
5506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5509530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_st_two_regs_imm16 (const char* name,
55107c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                                        test_func_t func_IN,
5511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                        unused uint32_t test_flags)
5512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
55137c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
55147c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
55155f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5516b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   int i, offs, k;
5517b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   HWord_t *iargs_priv, base;
5518b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // private iargs table to store to
552052675269f43c06380b04bf502c509cca4ee643b6cerion   iargs_priv = malloc(nb_iargs * sizeof(HWord_t));
5521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // +ve d
5523b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs_priv[0];
5524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
552552675269f43c06380b04bf502c509cca4ee643b6cerion      for (k=0; k<nb_iargs; k++)  // clear array
552652675269f43c06380b04bf502c509cca4ee643b6cerion         iargs_priv[k] = 0;
552752675269f43c06380b04bf502c509cca4ee643b6cerion
5528b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * sizeof(HWord_t);
5529b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
553052675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
55317c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func_IN, func_buf );
5532b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      patch_op_imm16(&func_buf[0], offs);
553352675269f43c06380b04bf502c509cca4ee643b6cerion
5534b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = iargs[i];             // read from iargs
5535b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r15 = base;                 // store to r15 + offs
5536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
55375f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
55395f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5541a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5542b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %08x, %2d => %08x, %2d (%08x %08x)\n",
5543a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
55442762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %3d => %016llx, %3lld (%08x %08x)\n",
5545a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5546b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, iargs[i], offs, iargs_priv[i], r15-base, flags, xer);
5547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose) printf("\n");
5549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // -ve d
5551b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs_priv[nb_iargs-1];
5552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i = -nb_iargs+1; i<=0; i++) {
555352675269f43c06380b04bf502c509cca4ee643b6cerion      for (k=0; k<nb_iargs; k++)  // clear array
555452675269f43c06380b04bf502c509cca4ee643b6cerion         iargs_priv[k] = 0;
555552675269f43c06380b04bf502c509cca4ee643b6cerion
5556b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * sizeof(HWord_t);
5557b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
555852675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
55597c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func, func_buf );
5560b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      patch_op_imm16(&func_buf[0], offs);
556152675269f43c06380b04bf502c509cca4ee643b6cerion
5562b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = iargs[nb_iargs-1+i];  // read from iargs
5563b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r15 = base;                 // store to r15 + offs
5564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
55655f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
55675f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5569a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5570b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %08x, %2d => %08x, %2d (%08x %08x)\n",
5571a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
55722762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %3d => %016llx, %3lld (%08x %08x)\n",
5573a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5574b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, iargs[nb_iargs-1+i], offs, iargs_priv[nb_iargs-1+i],
5575b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             r15-base, flags, xer);
5576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   free(iargs_priv);
5578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5580530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_st_three_regs (const char* name,
5581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    test_func_t func,
5582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
5583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
55845f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5585b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   int i, offs, k;
5586b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   HWord_t *iargs_priv, base;
5587b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // private iargs table to store to
558952675269f43c06380b04bf502c509cca4ee643b6cerion   iargs_priv = malloc(nb_iargs * sizeof(HWord_t));
5590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5591b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs_priv[0];
5592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
559352675269f43c06380b04bf502c509cca4ee643b6cerion      for (k=0; k<nb_iargs; k++)  // clear array
559452675269f43c06380b04bf502c509cca4ee643b6cerion         iargs_priv[k] = 0;
559552675269f43c06380b04bf502c509cca4ee643b6cerion
5596b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * sizeof(HWord_t);
5597b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = iargs[i];             // read from iargs
5598b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r15 = base;                 // store to r15 + offs
5599b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r16 = offs;
5600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
56015f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
56035f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5605a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5606b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %08x, %d => %08x, %d (%08x %08x)\n",
5607a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
56082762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %3d => %016llx, %2lld (%08x %08x)\n",
5609a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5610b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, iargs[i], offs, iargs_priv[i], r15-base, flags, xer);
5611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   free(iargs_priv);
5613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
5617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
5618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
5619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t int_loops[] = {
5620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_one_arg,
5621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_two_args,
5622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_three_args,
5623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_two_args,
5624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_one_reg_imm16,
5625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_one_reg_imm16,
5626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_special,
5627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_ld_one_reg_imm16,
5628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_ld_two_regs,
5629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_st_two_regs_imm16,
5630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_st_three_regs,
5631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
5634530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_three_args (const char* name, test_func_t func,
5635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                   unused uint32_t test_flags)
5636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   double res;
5638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t u0, u1, u2, ur;
56395f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags;
5640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k;
5641c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5642586fb038935723146cb6950b38911aeb9fc12765cerion   /* Note: using nb_normal_fargs:
5643586fb038935723146cb6950b38911aeb9fc12765cerion      - not testing special values for these insns
5644586fb038935723146cb6950b38911aeb9fc12765cerion   */
5645586fb038935723146cb6950b38911aeb9fc12765cerion
5646586fb038935723146cb6950b38911aeb9fc12765cerion   for (i=0; i<nb_normal_fargs; i+=3) {
5647586fb038935723146cb6950b38911aeb9fc12765cerion      for (j=0; j<nb_normal_fargs; j+=5) {
5648586fb038935723146cb6950b38911aeb9fc12765cerion         for (k=0; k<nb_normal_fargs; k+=7) {
5649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            u0 = *(uint64_t *)(&fargs[i]);
5650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            u1 = *(uint64_t *)(&fargs[j]);
5651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            u2 = *(uint64_t *)(&fargs[k]);
5652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            f14 = fargs[i];
5653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            f15 = fargs[j];
5654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            f16 = fargs[k];
5655c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
56565f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            SET_FPSCR_ZERO;
56575f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            SET_CR_XER_ZERO;
5658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
56595f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            GET_CR(flags);
5660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            res = f17;
5661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            ur = *(uint64_t *)(&res);
5662b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5663586fb038935723146cb6950b38911aeb9fc12765cerion            /* Note: zapping the bottom byte of the result,
5664586fb038935723146cb6950b38911aeb9fc12765cerion               as vex's accuracy isn't perfect */
5665586fb038935723146cb6950b38911aeb9fc12765cerion            ur &= 0xFFFFFFFFFFFFFF00ULL;
5666586fb038935723146cb6950b38911aeb9fc12765cerion
5667a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5668b8efd2a1d18b2e2293527db3c8262f196008ffbecerion            printf("%s %016llx, %016llx, %016llx => %016llx",
5669a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
56702762a738523d6f37cab30c4b1fae6a30414a81f6sewardj            printf("%s %016llx, %016llx, %016llx => %016llx",
5671a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5672586fb038935723146cb6950b38911aeb9fc12765cerion                   name, u0, u1, u2, ur);
5673b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#if defined TEST_FLOAT_FLAGS
5674b8efd2a1d18b2e2293527db3c8262f196008ffbecerion            printf(" (%08x)", flags);
5675586fb038935723146cb6950b38911aeb9fc12765cerion#endif
5676b8efd2a1d18b2e2293527db3c8262f196008ffbecerion            printf("\n");
5677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
5678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
5679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5683530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_two_args (const char* name, test_func_t func,
5684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 unused uint32_t test_flags)
5685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   double res;
5687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t u0, u1, ur;
56885f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags;
5689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
5690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_fargs; i+=3) {
5692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_fargs; j+=5) {
5693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         u0 = *(uint64_t *)(&fargs[i]);
5694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         u1 = *(uint64_t *)(&fargs[j]);
5695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         f14 = fargs[i];
5696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         f15 = fargs[j];
5697b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
56985f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_FPSCR_ZERO;
56995f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_CR_XER_ZERO;
5700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
57015f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR(flags);
5702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = f17;
5703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ur = *(uint64_t *)(&res);
5704b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5705a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5706b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         printf("%s %016llx, %016llx => %016llx",
5707a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
57082762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %016llx, %016llx => %016llx",
5709a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5710586fb038935723146cb6950b38911aeb9fc12765cerion                name, u0, u1, ur);
5711b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#if defined TEST_FLOAT_FLAGS
5712b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         printf(" (%08x)", flags);
5713586fb038935723146cb6950b38911aeb9fc12765cerion#endif
5714b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         printf("\n");
5715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
5717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5720530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_one_arg (const char* name, test_func_t func,
5721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                unused uint32_t test_flags)
5722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   double res;
5724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t u0, ur;
57255f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags;
572652675269f43c06380b04bf502c509cca4ee643b6cerion   int i, zap_hi_32bits;
5727586fb038935723146cb6950b38911aeb9fc12765cerion
5728586fb038935723146cb6950b38911aeb9fc12765cerion   /* if we're testing fctiw or fctiwz, zap the hi 32bits,
5729586fb038935723146cb6950b38911aeb9fc12765cerion      as they're undefined */
5730b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   zap_hi_32bits = strstr(name, "fctiw") != NULL;
5731586fb038935723146cb6950b38911aeb9fc12765cerion
5732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_fargs; i++) {
5733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      u0 = *(uint64_t *)(&fargs[i]);
5734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      f14 = fargs[i];
5735b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
57365f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       SET_FPSCR_ZERO;
57375f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       SET_CR_XER_ZERO;
57385f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       (*func)();
57395f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       GET_CR(flags);
57405f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       res = f17;
57415f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       ur = *(uint64_t *)(&res);
5742586fb038935723146cb6950b38911aeb9fc12765cerion
574352675269f43c06380b04bf502c509cca4ee643b6cerion      if (zap_hi_32bits)
5744586fb038935723146cb6950b38911aeb9fc12765cerion         ur &= 0xFFFFFFFFULL;
5745586fb038935723146cb6950b38911aeb9fc12765cerion
5746a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5747b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %016llx => %016llx",
5748a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
57492762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx => %016llx",
5750a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5751b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, u0, ur);
5752586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS
5753b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf(" (%08x)", flags);
5754586fb038935723146cb6950b38911aeb9fc12765cerion#endif
5755b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("\n");
5756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    }
5757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Special test cases for:
5760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mffs
5761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtfsb0
5762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtfsb1
5763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
5764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_float_ops[] = {
5765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
5766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mffs",   /* One 5 bits immediate argument */
5768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mffs.",   /* One 5 bits immediate argument */
5772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb0", /* One 5 bits immediate argument */
5776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb0.", /* One 5 bits immediate argument */
5780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb1", /* One 5 bits immediate argument */
5784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb1.", /* One 5 bits immediate argument */
5788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsf",  /* One register + 1 8 bits immediate argument */
5792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsf_cb,
5793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsf.",  /* One register + 1 8 bits immediate argument */
5796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsf_cb,
5797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsfi", /* One 5 bits argument + 1 5 bits argument */
5800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsfi_cb,
5801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsfi.", /* One 5 bits argument + 1 5 bits argument */
5804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsfi_cb,
5805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
5809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
5810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5813530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_special (const char* name, test_func_t func,
5814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                uint32_t test_flags)
5815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_special(special_float_ops, name, func, test_flags);
5817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5819c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5820c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_ld_one_reg_imm16 (const char* name,
58217c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                                         test_func_t func_IN,
5822c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                         unused uint32_t test_flags)
5823c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
58247c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
58257c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
58267c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t base;
58275f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5828c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   volatile double src, res;
5829c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   int i, offs;
5830c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5831c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* offset within [1-nb_fargs:nb_fargs] */
5832c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   for (i=1-nb_fargs; i<nb_fargs; i++) {
5833c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      offs = i * 8;      // offset = i * sizeof(double)
5834c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      if (i < 0) {
5835c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src  = fargs[nb_fargs-1 + i];
583652675269f43c06380b04bf502c509cca4ee643b6cerion         base = (HWord_t)&fargs[nb_fargs-1];
5837c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      } else {
5838c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src = fargs[i];
583952675269f43c06380b04bf502c509cca4ee643b6cerion         base = (HWord_t)&fargs[0];
5840c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      }
5841c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
584252675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
58437c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func_IN, func_buf );
584452675269f43c06380b04bf502c509cca4ee643b6cerion      patch_op_imm16(&func_buf[0], offs);
5845c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5846c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      // load from fargs[idx] => r14 + offs
5847c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      r14 = base;
5848c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
58495f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5850c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      (*func)();
58515f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5852c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      res = f17;
5853c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5854a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5855b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %016llx, %4d => %016llx, %4d",
5856a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
58572762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %4d => %016llx, %4lld",
5858a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5859c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             name, double_to_bits(src), offs,
5860b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             double_to_bits(res), r14-base);
5861b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#if defined TEST_FLOAT_FLAGS
5862b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf(" (%08x %08x)", flags, xer);
5863586fb038935723146cb6950b38911aeb9fc12765cerion#endif
5864b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("\n");
5865c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   }
5866c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   if (verbose) printf("\n");
5867c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
5868c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5869c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_ld_two_regs (const char* name,
5870c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                    test_func_t func,
5871c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                    unused uint32_t test_flags)
5872c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
587352675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t base;
58745f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5875c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   volatile double src, res;
5876b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   int i, offs;
5877c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5878c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* offset within [1-nb_fargs:nb_fargs] */
5879c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   for (i=1-nb_fargs; i<nb_fargs; i++) {
5880b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * 8;                // offset = i * sizeof(double)
5881c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      if (i < 0) {                 // base reg = start of array
5882c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src  = fargs[nb_fargs-1 + i];
588352675269f43c06380b04bf502c509cca4ee643b6cerion         base = (HWord_t)&fargs[nb_fargs-1];
5884c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      } else {
5885c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src  = fargs[i];
588652675269f43c06380b04bf502c509cca4ee643b6cerion         base = (HWord_t)&fargs[0];
5887c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      }
5888c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5889c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      r14 = base;
5890b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r15 = offs;
5891c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
58925f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5893c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      (*func)();
58945f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5895c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      res = f17;
5896c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5897a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5898b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %016llx, %4d => %016llx, %4d",
5899a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
59002762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %4lld => %016llx, %4lld",
5901a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5902b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, double_to_bits(src), r15/*offs*/,
5903b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             double_to_bits(res), r14-base);
5904586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS
5905b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf(" (%08x %08x)", flags, xer);
5906586fb038935723146cb6950b38911aeb9fc12765cerion#endif
5907b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("\n");
5908c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   }
5909c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
5910c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5911c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_st_two_regs_imm16 (const char* name,
59127c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                                          test_func_t func_IN,
5913c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                          unused uint32_t test_flags)
5914c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
59157c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
59167c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
591752675269f43c06380b04bf502c509cca4ee643b6cerion   HWord_t base;
59185f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5919c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   double src, *p_dst;
5920c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   int i, offs;
5921c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   double *fargs_priv;
5922586fb038935723146cb6950b38911aeb9fc12765cerion   int nb_tmp_fargs = nb_fargs;
5923586fb038935723146cb6950b38911aeb9fc12765cerion
592452675269f43c06380b04bf502c509cca4ee643b6cerion
5925586fb038935723146cb6950b38911aeb9fc12765cerion   /* if we're storing an fp single-precision, don't want nans
5926586fb038935723146cb6950b38911aeb9fc12765cerion      - the vex implementation doesn't like them (yet)
5927586fb038935723146cb6950b38911aeb9fc12765cerion      Note: This is actually a bigger problem: the vex implementation
5928586fb038935723146cb6950b38911aeb9fc12765cerion      rounds these insns twice.  This leads to many rounding errors.
5929586fb038935723146cb6950b38911aeb9fc12765cerion      For the small fargs set, however, this doesn't show up.
5930586fb038935723146cb6950b38911aeb9fc12765cerion   */
593152675269f43c06380b04bf502c509cca4ee643b6cerion   if (strstr(name, "stfs") != NULL)
5932586fb038935723146cb6950b38911aeb9fc12765cerion      nb_tmp_fargs = nb_normal_fargs;
5933586fb038935723146cb6950b38911aeb9fc12765cerion
5934586fb038935723146cb6950b38911aeb9fc12765cerion
5935c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   // private fargs table to store to
5936586fb038935723146cb6950b38911aeb9fc12765cerion   fargs_priv = malloc(nb_tmp_fargs * sizeof(double));
5937c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5938586fb038935723146cb6950b38911aeb9fc12765cerion   /* offset within [1-nb_tmp_fargs:nb_tmp_fargs] */
5939586fb038935723146cb6950b38911aeb9fc12765cerion   for (i=1-nb_tmp_fargs; i<nb_tmp_fargs; i++) {
5940c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      offs = i * 8;    // offset = i * sizeof(double)
5941c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      if (i < 0) {
5942586fb038935723146cb6950b38911aeb9fc12765cerion         src   =  fargs     [nb_tmp_fargs-1 + i];
5943586fb038935723146cb6950b38911aeb9fc12765cerion         p_dst = &fargs_priv[nb_tmp_fargs-1 + i];
594452675269f43c06380b04bf502c509cca4ee643b6cerion         base  = (HWord_t)&fargs_priv[nb_tmp_fargs-1];
5945c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      } else {
5946c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src   =  fargs     [i];
5947c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         p_dst = &fargs_priv[i];
594852675269f43c06380b04bf502c509cca4ee643b6cerion         base  = (HWord_t)&fargs_priv[0];
5949c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      }
5950c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      *p_dst = 0;  // clear dst
5951c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
595252675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
59537c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func_IN, func_buf );
595452675269f43c06380b04bf502c509cca4ee643b6cerion      patch_op_imm16(&func_buf[0], offs);
5955c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5956c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      // read from fargs[idx] => f14
5957c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      // store to fargs_priv[idx] => r15 + offs
5958c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      f14 = src;
5959c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      r15 = base;
5960c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
59615f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5962c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      (*func)();
59635f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5964c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5965a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5966b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %016llx, %4d => %016llx, %4d",
5967a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
59682762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %4d => %016llx, %4lld",
5969a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5970c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             name, double_to_bits(src), offs,
5971b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             double_to_bits(*p_dst), r15-base);
5972b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#if defined TEST_FLOAT_FLAGS
5973b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf(" (%08x %08x)", flags, xer);
5974586fb038935723146cb6950b38911aeb9fc12765cerion#endif
5975b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("\n");
5976c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   }
5977c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   free(fargs_priv);
5978c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
5979c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5980c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_st_three_regs (const char* name,
5981c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                      test_func_t func,
5982c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                      unused uint32_t test_flags)
5983c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
598452675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t base;
59855f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5986c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   double src, *p_dst;
5987c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   int i, offs;
5988c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   double *fargs_priv;
5989586fb038935723146cb6950b38911aeb9fc12765cerion   int nb_tmp_fargs = nb_fargs;
5990586fb038935723146cb6950b38911aeb9fc12765cerion
5991b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5992586fb038935723146cb6950b38911aeb9fc12765cerion   /* if we're storing an fp single-precision, don't want nans
5993586fb038935723146cb6950b38911aeb9fc12765cerion      - the vex implementation doesn't like them (yet)
5994586fb038935723146cb6950b38911aeb9fc12765cerion      Note: This is actually a bigger problem: the vex implementation
5995586fb038935723146cb6950b38911aeb9fc12765cerion      rounds these insns twice.  This leads to many rounding errors.
5996586fb038935723146cb6950b38911aeb9fc12765cerion      For the small fargs set, however, this doesn't show up.
5997586fb038935723146cb6950b38911aeb9fc12765cerion   */
599852675269f43c06380b04bf502c509cca4ee643b6cerion   if (strstr(name, "stfs") != NULL)  // stfs(u)(x)
5999586fb038935723146cb6950b38911aeb9fc12765cerion      nb_tmp_fargs = nb_normal_fargs;
6000586fb038935723146cb6950b38911aeb9fc12765cerion
6001c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6002c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   // private fargs table to store to
6003586fb038935723146cb6950b38911aeb9fc12765cerion   fargs_priv = malloc(nb_tmp_fargs * sizeof(double));
6004c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6005586fb038935723146cb6950b38911aeb9fc12765cerion   //   /* offset within [1-nb_tmp_fargs:nb_tmp_fargs] */
6006586fb038935723146cb6950b38911aeb9fc12765cerion   //   for (i=1-nb_tmp_fargs; i<nb_tmp_fargs; i++) {
6007586fb038935723146cb6950b38911aeb9fc12765cerion   for (i=0; i<nb_tmp_fargs; i++) {
6008c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      offs = i * 8;    // offset = i * sizeof(double)
6009c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      if (i < 0) {
6010586fb038935723146cb6950b38911aeb9fc12765cerion         src   =  fargs     [nb_tmp_fargs-1 + i];
6011586fb038935723146cb6950b38911aeb9fc12765cerion         p_dst = &fargs_priv[nb_tmp_fargs-1 + i];
601252675269f43c06380b04bf502c509cca4ee643b6cerion         base  = (HWord_t)&fargs_priv[nb_tmp_fargs-1];
6013c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      } else {
6014c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src   =  fargs     [i];
6015c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         p_dst = &fargs_priv[i];
601652675269f43c06380b04bf502c509cca4ee643b6cerion         base  = (HWord_t)&fargs_priv[0];
6017c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      }
6018c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      *p_dst = 0;  // clear dst
6019c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6020c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      f14  = src;    // read from fargs
6021c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      r15  = base;   // store to r15 + offs
6022c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      r16  = offs;
6023c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
60245f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
6025c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      (*func)();
60265f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
6027c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6028a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
6029b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %016llx, %4d => %016llx, %4d",
6030a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
60312762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %4lld => %016llx, %4lld",
6032a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
6033b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, double_to_bits(src), r16/*offs*/,
6034b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             double_to_bits(*p_dst), r15-base);
6035586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS
6036b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf(" (%08x %08x)", flags, xer);
6037586fb038935723146cb6950b38911aeb9fc12765cerion#endif
6038b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("\n");
6039586fb038935723146cb6950b38911aeb9fc12765cerion
6040586fb038935723146cb6950b38911aeb9fc12765cerion
6041586fb038935723146cb6950b38911aeb9fc12765cerion#if 0
6042586fb038935723146cb6950b38911aeb9fc12765cerion      // print double precision result
6043a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
6044c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      printf("%s %016llx (%014e), %4d => %016llx (%014e), %08x (%08x %08x)\n",
6045a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
60462762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx (%014e), %4d => %016llx (%014e), %08x (%08x %08x)\n",
6047a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
6048c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             name, double_to_bits(src), src, offs,
6049c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             double_to_bits(*p_dst), *p_dst, r15, flags, xer);
6050586fb038935723146cb6950b38911aeb9fc12765cerion
6051c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      // print single precision result
6052a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
6053c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      printf("%s %016llx (%014e), %4d => %08x (%f), %08x (%08x %08x)\n",
6054a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
60552762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx (%014e), %4d => %08x (%f), %08x (%08x %08x)\n",
6056a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
6057c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             name, double_to_bits(src), src, offs,
6058c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             (uint32_t)(double_to_bits(*p_dst) >> 32),
6059c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             bits_to_float( (uint32_t)(double_to_bits(*p_dst) >> 32) ),
6060c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             r15, flags, xer);
6061c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif
6062c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   }
6063c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   free(fargs_priv);
6064c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
6065c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6066c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
6068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
6069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
6070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t float_loops[] = {
6071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_one_arg,
6072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_two_args,
6073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_three_args,
6074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_two_args,
6075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_special,
6078c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   &test_float_ld_one_reg_imm16,
6079c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   &test_float_ld_two_regs,
6080c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   &test_float_st_two_regs_imm16,
6081c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   &test_float_st_three_regs,
6082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
6083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
6084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6086f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
6087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Ref: vector insns to test setting CR, VSCR:
6089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         volatile vector unsigned int v1 =
6090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            //            (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF };
6091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (vector unsigned int){ 0x80808080,0x80808080,0x80808080,0x80808080 };
6092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         volatile vector unsigned int v2 =
6093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            //            (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF };
6094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (vector unsigned int){ 0x01010101,0x01010101,0x01010101,0x01010101 };
60959f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         //__asm__ __volatile__ ("vcmpequw. 31,%0,%1" : : "v" (v1), "v" (v2));   // sets CR[6]
60969f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         //__asm__ __volatile__ ("vpkswss 31,%0,%1" : : "v" (v1), "v" (v2));     // sets VSCR[SAT]
60979f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vsubsbs 31,%0,%1" : : "v" (v1), "v" (v2));       // sets VSCR[SAT]
6098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
6099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
61001b6b2b3e62549edc02744bbc149c74bcc043835ecerion//#define DEFAULT_VSCR 0x00010000
61011b6b2b3e62549edc02744bbc149c74bcc043835ecerion#define DEFAULT_VSCR 0x0
6102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6103530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_one_arg (const char* name, test_func_t func,
6104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 unused uint32_t test_flags)
6105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6108f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in, vec_out, vscr;
6109f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src, *dst;
6110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
6111f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6112f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6113f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
6117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6120f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in  = (vector unsigned int)viargs[i];
6121f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_out = (vector unsigned int){ 0,0,0,0 };
6122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // reset VSCR and CR
6124f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = 0;
61269f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // load input -> r14
61309f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in));
6131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // do stuff
6133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
6134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // retrieve output <- r17
6136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // get CR,VSCR flags
6139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
6143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
61449f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6146f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      src = (unsigned int*)&vec_in;
6147f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      dst = (unsigned int*)&vec_out;
6148b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s: %08x %08x %08x %08x\n", name,
6150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             src[0], src[1], src[2], src[3]);
6151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s:  => %08x %08x %08x %08x ", name,
6152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             dst[0], dst[1], dst[2], dst[3]);
6153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6154f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      p_vscr = (unsigned int*)&vscr;
6155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x, %08x)\n", flags, p_vscr[3]);
6156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x)\n", flags);
6158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6162530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_two_args (const char* name, test_func_t func,
6163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  unused uint32_t test_flags)
6164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6167f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in1, vec_in2, vec_out, vscr;
6168f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *dst;
6169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
6170f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6171f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6172f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6175f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in1 = (vector unsigned int)viargs[i];
6176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_viargs; j++) {
6177f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in2 = (vector unsigned int)viargs[j];
6178f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector unsigned int){ 0,0,0,0 };
6179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
6181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
6185f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
61879f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load inputs -> r14,r15
61919f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
61929f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2));
6193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
6195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
6196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
6198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
6201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
6205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
62069f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6208f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src1 = (unsigned int*)&vec_in1;
6209f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src2 = (unsigned int*)&vec_in2;
6210f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst  = (unsigned int*)&vec_out;
6211b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: ", name);
6213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]);
6214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]);
6215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
6216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
6217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6218f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         p_vscr = (unsigned int*)&vscr;
6219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x, %08x)\n", flags, p_vscr[3]);
6220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x)\n", flags);
6222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
6225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6228530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_three_args (const char* name, test_func_t func,
6229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
6230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6233f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in1, vec_in2, vec_in3, vec_out, vscr;
6234f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *src3, *dst;
6235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j,k;
6236f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6237f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6238f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6241f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in1 = (vector unsigned int)viargs[i];
6242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_viargs; j++) {
6243f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in2 = (vector unsigned int)viargs[j];
6244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_viargs; k++) {
6245f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_in3 = (vector unsigned int)viargs[k];
6246f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_out = (vector unsigned int){ 0,0,0,0 };
6247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
6249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // reset VSCR and CR
6253f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = 0;
62559f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // load inputs -> r14,r15,r16
62599f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
62609f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2));
62619f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 16,%0,%0" : : "v" (vec_in3));
6262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // do stuff
6264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
6265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // retrieve output <- r17
6267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // get CR,VSCR flags
6270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
6274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
62759f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6277f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src1 = (unsigned int*)&vec_in1;
6278f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src2 = (unsigned int*)&vec_in2;
6279f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src3 = (unsigned int*)&vec_in3;
6280f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            dst  = (unsigned int*)&vec_out;
6281b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
6283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src1[0], src1[1], src1[2], src1[3],
6284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src2[0], src2[1], src2[2], src2[3],
6285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src3[0], src3[1], src3[2], src3[3]);
6286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s:  => %08x%08x%08x%08x ", name,
6288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   dst[0], dst[1], dst[2], dst[3]);
6289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6290f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            p_vscr = (unsigned int*)&vscr;
6291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x, %08x)\n", flags, p_vscr[3]);
6292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x)\n", flags);
6294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
6296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
6297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6302530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vs128_cb (const char* name, test_func_t func,
6303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
6304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6307f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned char vec_shft;
6308f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in1, vec_out, vscr;
6309f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *dst;
6310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
6311f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6312f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6313f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6316f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in1 = (vector unsigned int)viargs[i];
6317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<8; j++) {
6318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* low-order 3bits of every byte must be the same for the shift vector */
6319f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_shft = (vector unsigned char) { j,j,j,j, j,j,j,j, j,j,j,j, j,j,j,j };
6320f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out  = (vector unsigned int){ 0,0,0,0 };
6321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
6323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
6327f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
63299f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load inputs -> r14,r15
63339f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
63349f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_shft));
6335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
6337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
6338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
6340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
6343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
6347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
63489f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6350f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src1 = (unsigned int*)&vec_in1;
6351f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src2 = (unsigned int*)&vec_shft;
6352f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst  = (unsigned int*)&vec_out;
6353b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: ", name);
6355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]);
6356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]);
6357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
6359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
6360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6361f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         p_vscr = (unsigned int*)&vscr;
6362f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         printf("(%08x, %08x)\n", flags, p_vscr[3]);
6363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6364f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         printf("(%08x)\n", flags);
6365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
6368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
63717c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void vsplt_cb (const char* name, test_func_t func_IN,
6372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
6373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
63747c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
63757c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
6376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6378f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in1, vec_out, vscr;
6379f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *dst;
6380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
6381f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6382f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6383f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6386f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in1 = (vector unsigned int)viargs[i];
6387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<16; j+=3) {
6389f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector unsigned int){ 0,0,0,0 };
6390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Patch up the instruction */
63927c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
639352675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm(&func_buf[0], j, 16, 5);
639452675269f43c06380b04bf502c509cca4ee643b6cerion
6395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
6396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
6400f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
64029f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load input -> r14
64069f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
6407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
6409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
6410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
6412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
6415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
6419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
64209f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6422f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src1 = (unsigned int*)&vec_in1;
6423f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst  = (unsigned int*)&vec_out;
6424b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: ", name);
6426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x %08x %08x %08x, %u\n", src1[0], src1[1], src1[2], src1[3], j);
6427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
6429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
6430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6431f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         p_vscr = (unsigned int*)&vscr;
6432f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         printf("(%08x, %08x)\n", flags, p_vscr[3]);
6433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6434f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         printf("(%08x)\n", flags);
6435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
6438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
64417c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void vspltis_cb (const char* name, test_func_t func_IN,
6442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
6443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
64447c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
64457c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
6446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6448f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_out, vscr;
6449f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *dst;
6450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
6451f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6452f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6453f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<32; i++) {
6456f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_out = (vector unsigned int){ 0,0,0,0 };
6457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Patch up the instruction */
64597c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func_IN, func_buf );
646052675269f43c06380b04bf502c509cca4ee643b6cerion      patch_op_imm(&func_buf[0], i, 16, 5);
6461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
6463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // reset VSCR and CR
6467f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = 0;
64699f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // do stuff
6473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
6474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // retrieve output <- r17
6476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // get CR,VSCR flags
6479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
6483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
64849f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6486f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      dst = (unsigned int*)&vec_out;
6487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6488b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s: %2d => ", name, i);
6489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
6490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6491f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      p_vscr = (unsigned int*)&vscr;
6492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x, %08x)\n", flags, p_vscr[3]);
6493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x)\n", flags);
6495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
64997c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void vsldoi_cb (const char* name, test_func_t func_IN,
6500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                       unused uint32_t test_flags)
6501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
65027c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
65037c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
6504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6506f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in1, vec_in2, vec_out, vscr;
6507f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *dst;
6508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j,k;
6509f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6510f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6511f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6514f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in1 = (vector unsigned int)viargs[i];
6515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_viargs; j++) {
6516f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in2 = (vector unsigned int)viargs[j];
6517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<16; k+=14) {
6518f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_out = (vector unsigned int){ 0,0,0,0 };
6519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Patch up the instruction */
65217c01859c190613f313f57fc4b1c6bb14124b00c7sewardj            func = init_function( func_IN, func_buf );
652252675269f43c06380b04bf502c509cca4ee643b6cerion            patch_op_imm(&func_buf[0], k, 6, 4);
6523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
6525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // reset VSCR and CR
6529f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = 0;
65319f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // load inputs -> r14,r15
65359f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
65369f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2));
6537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // do stuff
6539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
6540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // retrieve output <- r17
6542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // get CR,VSCR flags
6545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
6549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
65509f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6552f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src1   = (unsigned int*)&vec_in1;
6553f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src2   = (unsigned int*)&vec_in2;
6554f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            dst    = (unsigned int*)&vec_out;
6555b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s: ", name);
6557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%08x%08x%08x%08x, %08x%08x%08x%08x, %u\n",
6558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src1[0], src1[1], src1[2], src1[3],
6559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src2[0], src2[1], src2[2], src2[3], k);
6560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s:  => %08x %08x %08x %08x] ", name,
6562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   dst[0], dst[1], dst[2], dst[3]);
6563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6564f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            p_vscr = (unsigned int*)&vscr;
6565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x, %08x)\n", flags, p_vscr[3]);
6566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x)\n", flags);
6568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
6570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
6571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
657505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion/* lvsl, lvsr */
657605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void lvs_cb (const char *name, test_func_t func,
657705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                    unused uint32_t test_flags)
657805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
657905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile uint32_t flags, tmpcr;
658005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile vector unsigned int tmpvscr;
6581f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_out, vscr;
6582f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *dst;
658305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   int i;
6584f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6585f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6586f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
658705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
658805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=-1; i<17; i++) {
6589f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_out = (vector unsigned int){ 0,0,0,0 };
659005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
659105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // make sure start address is 16 aligned - use viargs[0]
659252675269f43c06380b04bf502c509cca4ee643b6cerion      r15 = (HWord_t)&viargs[0];
659305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      r14 = i;
659405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
659505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      /* Save flags */
659605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
659705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
659805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
659905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // reset VSCR and CR
6600f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
660105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      flags = 0;
66029f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
660305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
660405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
660505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // do stuff
660605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      (*func)();
660705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
660805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // retrieve output <- r17
660905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
661005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
661105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // get CR,VSCR flags
661205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
661305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
661405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
661505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      /* Restore flags */
661605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
66179f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
661805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
6619f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      dst = (unsigned int*)&vec_out;
6620b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
662105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      printf("%s %3d, %3d", name, i, 0);
662205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
662305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      printf("(%08x)\n", flags);
662405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
662505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   if (verbose) printf("\n");
662605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
662705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
6628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_av_int_ops[] = {
6629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsr", /* Two registers arguments */
6631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vs128_cb,
6632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsl", /* Two registers arguments */
6635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vs128_cb,
6636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltb", /* One reg, one 5-bit uimm arguments */
6639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsplt_cb,
6640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsplth", /* One reg, one 5-bit uimm arguments */
6643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsplt_cb,
6644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltw", /* One reg, one 5-bit uimm arguments */
6647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsplt_cb,
6648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltisb", /* One reg, one 5-bit uimm arguments */
6651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vspltis_cb,
6652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltish", /* One reg, one 5-bit uimm arguments */
6655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vspltis_cb,
6656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltisw", /* One reg, one 5-bit uimm arguments */
6659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vspltis_cb,
6660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsldoi", /* Two regs, one 4-bit uimm arguments */
6663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsldoi_cb,
6664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
666505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   {
666605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      "lvsl", /* Two regs */
666705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      &lvs_cb,
666805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   },
666905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   {
667005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      "lvsr", /* Two regs */
667105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      &lvs_cb,
667205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   },
667305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   {
667405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      NULL,
667505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      NULL,
667605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   },
6677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
6678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6679530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_special (const char* name, test_func_t func,
6680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 uint32_t test_flags)
6681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_special(special_av_int_ops, name, func, test_flags);
6683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
668505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_av_int_ld_two_regs (const char *name,
668605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                  test_func_t func,
668705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                  unused uint32_t test_flags)
668805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
668905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile uint32_t flags, tmpcr;
669005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile vector unsigned int tmpvscr;
6691f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in, vec_out, vscr;
6692f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src, *dst;
669381aab3c751b11fcfa6629b449c92bd7e3f459567sewardj   int i,j, k, do_mask;
669481aab3c751b11fcfa6629b449c92bd7e3f459567sewardj
669581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj   do_mask = 0;
669652675269f43c06380b04bf502c509cca4ee643b6cerion   if (strstr(name, "lvebx") != NULL) do_mask = 1;
669752675269f43c06380b04bf502c509cca4ee643b6cerion   if (strstr(name, "lvehx") != NULL) do_mask = 2;
669852675269f43c06380b04bf502c509cca4ee643b6cerion   if (strstr(name, "lvewx") != NULL) do_mask = 4;
669905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
670005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=0; i<nb_viargs; i++) {
670105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      for (j=0; j<16; j+=7) {
6702f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector unsigned int){ 0,0,0,0 };
670305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
670405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // load from viargs array + some dis-alignment
670552675269f43c06380b04bf502c509cca4ee643b6cerion         r15 = (HWord_t)&viargs[0];
670605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         r14 = i*16 + j;
670705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
670805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Save flags */
670905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
671005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
671105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
671205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // reset VSCR and CR
6713f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
671405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         flags = 0;
67159f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
671605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
671781aab3c751b11fcfa6629b449c92bd7e3f459567sewardj
671805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // do stuff
671905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         (*func)();
672005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
672105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // retrieve output <- r17
672205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
672305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
672405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // get CR,VSCR flags
672505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
672605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
672705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
672805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Restore flags */
672905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
67309f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
673105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
6732f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in = (vector unsigned int)viargs[i];
6733f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src = (unsigned int*)&vec_in;
6734f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst = (unsigned int*)&vec_out;
673581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj
673681aab3c751b11fcfa6629b449c92bd7e3f459567sewardj         /* For lvebx/lvehx/lvewx, as per the documentation, all of
673781aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            the dest reg except the loaded bits are undefined
673881aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            afterwards.  And different CPUs really do produce
673981aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            different results.  So mask out bits of the result that
674081aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            are undefined so as to make the test work reliably. */
674181aab3c751b11fcfa6629b449c92bd7e3f459567sewardj         if (do_mask == 1) {
674281aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            char* p = (char*)dst;
674381aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            for (k = 0; k < 16; k++)
674481aab3c751b11fcfa6629b449c92bd7e3f459567sewardj               if (k != j)
674581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj                  p[k] = (char)0;
6746f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         }
674781aab3c751b11fcfa6629b449c92bd7e3f459567sewardj         if (do_mask == 2) {
674881aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            short* p = (short*)dst;
674981aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            for (k = 0; k < 8; k++)
675081aab3c751b11fcfa6629b449c92bd7e3f459567sewardj               if (k != (j>>1))
675181aab3c751b11fcfa6629b449c92bd7e3f459567sewardj                  p[k] = (short)0;
6752f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         }
675381aab3c751b11fcfa6629b449c92bd7e3f459567sewardj         if (do_mask == 4) {
675481aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            int* p = (int*)dst;
675581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            for (k = 0; k < 4; k++)
675681aab3c751b11fcfa6629b449c92bd7e3f459567sewardj               if (k != (j>>2))
675781aab3c751b11fcfa6629b449c92bd7e3f459567sewardj                  p[k] = (int)0;
6758f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         }
675981aab3c751b11fcfa6629b449c92bd7e3f459567sewardj
676005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]);
676105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
676205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("(%08x)\n", flags);
676305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
676405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      if (verbose) printf("\n");
676505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
676605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
676705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
676805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
676905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_av_int_st_three_regs (const char *name,
677005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                       test_func_t func,
677105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                       unused uint32_t test_flags)
677205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
677305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile uint32_t flags, tmpcr;
677405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile vector unsigned int tmpvscr;
6775f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in, vec_out, vscr;
6776f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src, *dst;
677705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   int i,j;
677805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   vector unsigned int* viargs_priv;
677905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
678005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   // private viargs table to store to
678183b62cbbab29bde83eba40231f307c2a311e73c8njn   viargs_priv = memalign16(nb_viargs * sizeof(vector unsigned int));
678205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=0; i<nb_viargs; i++)
678305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      viargs_priv[i] = (vector unsigned int) { 0,0,0,0 };
678405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
678505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=0; i<nb_viargs; i++) {
678605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      for (j=0; j<16; j+=7) {
678705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // read from viargs
6788f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in = (vector unsigned int)viargs[i];
678905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
679005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // store to viargs_priv[0] + some dis-alignment
679152675269f43c06380b04bf502c509cca4ee643b6cerion         r16 = (HWord_t)&viargs_priv[0];
679205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         r15 = i*16 + j;
679305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
679405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Save flags */
679505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
679605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
679705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
679805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // reset VSCR and CR
6799f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
680005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         flags = 0;
68019f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
680205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
680305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
680405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // load inputs -> r14
68059f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in));
680605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
680705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // do stuff
680805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         (*func)();
680905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
681005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // Output stored in viargs_priv
681105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
681205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // get CR,VSCR flags
681305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
681405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
681505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
681605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Restore flags */
681705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
68189f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
681905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
6820f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector unsigned int)viargs_priv[i];
6821f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src = (unsigned int*)&vec_in;
6822f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst = (unsigned int*)&vec_out;
6823b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
682405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]);
682505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
682605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("(%08x)\n", flags);
682705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
682805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      if (verbose) printf("\n");
682905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
683005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
683105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
6832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
6833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
6834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
6835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t altivec_int_loops[] = {
6836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_one_arg,
6837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_two_args,
6838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_three_args,
6839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_two_args,
6840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_special,
6843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
684405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   &test_av_int_ld_two_regs,
6845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
684605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   test_av_int_st_three_regs,
6847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
6848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6850530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_one_arg (const char* name, test_func_t func,
6851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                   unused uint32_t test_flags)
6852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6855f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector float vec_in, vec_out;
6856f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vscr;
6857f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src, *dst;
6858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
6859f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6860f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6861f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6863e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj   /* if we're doing an estimation operation, arrange to zap the
6864e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj      bottom byte of the result as it's basically garbage, and differs
6865e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj      between cpus */
6866e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj   unsigned int mask
686752675269f43c06380b04bf502c509cca4ee643b6cerion      = (strstr(name,"vrsqrtefp") != NULL ||
686852675269f43c06380b04bf502c509cca4ee643b6cerion         strstr(name,    "vrefp") != NULL)
6869e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj           ? 0xFFFFFF00 : 0xFFFFFFFF;
6870e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj
6871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
6872f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in  = (vector float)vfargs[i];
6873f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
6874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
6876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // reset VSCR and CR
6880f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = 0;
68829f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // load input -> r14
68869f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in));
6887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // do stuff
6889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
6890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // retrieve output <- r17
6892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // get CR,VSCR flags
6895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
6899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
69009f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6902f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      src = (unsigned int*)&vec_in;
6903f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      dst = (unsigned int*)&vec_out;
6904b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s: %08x %08x %08x %08x\n", name,
6906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             src[0], src[1], src[2], src[3]);
6907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s:  => %08x %08x %08x %08x ", name,
6908e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj             dst[0] & mask, dst[1] & mask, dst[2] & mask, dst[3] & mask);
6909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6910f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      p_vscr = (unsigned int*)&vscr;
6911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x, %08x)\n", flags, p_vscr[3]);
6912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x)\n", flags);
6914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6918530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_two_args (const char* name, test_func_t func,
6919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
6920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6923f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector float vec_in1, vec_in2, vec_out;
6924f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vscr;
6925f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *dst;
6926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
6927f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6928f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6929f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
6932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_vfargs; j+=3) {
6933f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in1 = (vector float)vfargs[i];
6934f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in2 = (vector float)vfargs[j];
6935f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
6936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
6938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
6942f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
69449f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load inputs -> r14,r15
69489f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
69499f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2));
6950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
6952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
6953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
6955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
6958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
6962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
69639f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6965f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src1 = (unsigned int*)&vec_in1;
6966f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src2 = (unsigned int*)&vec_in2;
6967f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst  = (unsigned int*)&vec_out;
6968b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
6970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                src1[0], src1[1], src1[2], src1[3],
6971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                src2[0], src2[1], src2[2], src2[3]);
6972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
6973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
6974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6975f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         p_vscr = (unsigned int*)&vscr;
6976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x, %08x)\n", flags, p_vscr[3]);
6977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x)\n", flags);
6979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
6982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6985530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_three_args (const char* name, test_func_t func,
6986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                      unused uint32_t test_flags)
6987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6990f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector float vec_in1, vec_in2, vec_in3, vec_out;
6991f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vscr;
6992f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *src3, *dst;
6993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j,k;
6994f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6995f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6996f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
6999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_vfargs; j+=3) {
7000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_vfargs; k+=5) {
7001f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_in1 = (vector float)vfargs[i];
7002f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_in2 = (vector float)vfargs[j];
7003f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_in3 = (vector float)vfargs[k];
7004f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
7005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
7007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
7008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
7009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // reset VSCR and CR
7011f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
7012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = 0;
70139f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
7014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
7015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // load inputs -> r14,r15,r16
70179f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
70189f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2));
70199f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 16,%0,%0" : : "v" (vec_in3));
7020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // do stuff
7022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
7023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // retrieve output <- r17
7025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
7026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // get CR,VSCR flags
7028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
7029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
7030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
7032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
70339f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
7034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7035f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src1 = (unsigned int*)&vec_in1;
7036f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src2 = (unsigned int*)&vec_in2;
7037f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src3 = (unsigned int*)&vec_in3;
7038f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            dst  = (unsigned int*)&vec_out;
7039b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
7041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src1[0], src1[1], src1[2], src1[3],
7042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src2[0], src2[1], src2[2], src2[3],
7043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src3[0], src3[1], src3[2], src3[3]);
7044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s:  => %08x %08x %08x %08x ", name,
7045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   dst[0], dst[1], dst[2], dst[3]);
7046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
7047f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            p_vscr = (unsigned int*)&vscr;
7048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x, %08x)\n", flags, p_vscr[3]);
7049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x)\n", flags);
7051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
7054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
70587c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void vcvt_cb (const char* name, test_func_t func_IN,
70598f5fc19da719edcd8dfca920837bde7ce1d3accacerion                     unused uint32_t test_flags)
70608f5fc19da719edcd8dfca920837bde7ce1d3accacerion{
70617c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
70627c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
70638f5fc19da719edcd8dfca920837bde7ce1d3accacerion   volatile uint32_t flags, tmpcr;
70648f5fc19da719edcd8dfca920837bde7ce1d3accacerion   volatile vector unsigned int tmpvscr;
7065f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in, vec_out, vscr;
7066f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src, *dst;
70678f5fc19da719edcd8dfca920837bde7ce1d3accacerion   int i,j;
7068f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
7069f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
7070f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
70718f5fc19da719edcd8dfca920837bde7ce1d3accacerion
70728f5fc19da719edcd8dfca920837bde7ce1d3accacerion   for (i=0; i<nb_vfargs; i++) {
7073f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in = (vector unsigned int)vfargs[i];
70748f5fc19da719edcd8dfca920837bde7ce1d3accacerion
70758f5fc19da719edcd8dfca920837bde7ce1d3accacerion      for (j=0; j<32; j+=9) {
7076f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector unsigned int){ 0,0,0,0 };
70778f5fc19da719edcd8dfca920837bde7ce1d3accacerion
70788f5fc19da719edcd8dfca920837bde7ce1d3accacerion         /* Patch up the instruction */
70797c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
708052675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm(&func_buf[0], j, 16, 5);
70818f5fc19da719edcd8dfca920837bde7ce1d3accacerion
70828f5fc19da719edcd8dfca920837bde7ce1d3accacerion         /* Save flags */
70838f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
70848f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
70858f5fc19da719edcd8dfca920837bde7ce1d3accacerion
70868f5fc19da719edcd8dfca920837bde7ce1d3accacerion         // reset VSCR and CR
7087f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
70888f5fc19da719edcd8dfca920837bde7ce1d3accacerion         flags = 0;
70899f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
70908f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
70918f5fc19da719edcd8dfca920837bde7ce1d3accacerion
70928f5fc19da719edcd8dfca920837bde7ce1d3accacerion         // load input -> r14
70939f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in));
70948f5fc19da719edcd8dfca920837bde7ce1d3accacerion
70958f5fc19da719edcd8dfca920837bde7ce1d3accacerion         // do stuff
70968f5fc19da719edcd8dfca920837bde7ce1d3accacerion         (*func)();
70978f5fc19da719edcd8dfca920837bde7ce1d3accacerion
70988f5fc19da719edcd8dfca920837bde7ce1d3accacerion         // retrieve output <- r17
70998f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
71008f5fc19da719edcd8dfca920837bde7ce1d3accacerion
71018f5fc19da719edcd8dfca920837bde7ce1d3accacerion         // get CR,VSCR flags
71028f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
71038f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
71048f5fc19da719edcd8dfca920837bde7ce1d3accacerion
71058f5fc19da719edcd8dfca920837bde7ce1d3accacerion         /* Restore flags */
71068f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
71079f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
71088f5fc19da719edcd8dfca920837bde7ce1d3accacerion
7109f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src = (unsigned int*)&vec_in;
7110f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst = (unsigned int*)&vec_out;
7111b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7112f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         printf("%s: %08x (%13e), %2u", name, src[0], *(float*)(&src[0]), j);
71138f5fc19da719edcd8dfca920837bde7ce1d3accacerion         printf(" => %08x (%13e) ", dst[0], *(float*)(&dst[0]));
71148f5fc19da719edcd8dfca920837bde7ce1d3accacerion//         printf(" => %08x ", dst[0]);
71158f5fc19da719edcd8dfca920837bde7ce1d3accacerion#if defined TEST_VSCR_SAT
7116f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            p_vscr = (unsigned int*)&vscr;
71178f5fc19da719edcd8dfca920837bde7ce1d3accacerion            printf("(%08x, %08x)\n", flags, p_vscr[3]);
71188f5fc19da719edcd8dfca920837bde7ce1d3accacerion#else
71198f5fc19da719edcd8dfca920837bde7ce1d3accacerion            printf("(%08x)\n", flags);
71208f5fc19da719edcd8dfca920837bde7ce1d3accacerion#endif
71218f5fc19da719edcd8dfca920837bde7ce1d3accacerion      }
71228f5fc19da719edcd8dfca920837bde7ce1d3accacerion      if (verbose) printf("\n");
71238f5fc19da719edcd8dfca920837bde7ce1d3accacerion   }
71248f5fc19da719edcd8dfca920837bde7ce1d3accacerion}
71258f5fc19da719edcd8dfca920837bde7ce1d3accacerion
71268f5fc19da719edcd8dfca920837bde7ce1d3accacerionstatic special_t special_av_float_ops[] = {
71278f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
71288f5fc19da719edcd8dfca920837bde7ce1d3accacerion      "vcfux", /* One reg, one 5-bit uimm argument */
71298f5fc19da719edcd8dfca920837bde7ce1d3accacerion      &vcvt_cb,
71308f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
71318f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
71328f5fc19da719edcd8dfca920837bde7ce1d3accacerion      "vcfsx", /* One reg, one 5-bit uimm argument */
71338f5fc19da719edcd8dfca920837bde7ce1d3accacerion      &vcvt_cb,
71348f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
71358f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
71368f5fc19da719edcd8dfca920837bde7ce1d3accacerion      "vctuxs", /* One reg, one 5-bit uimm argument */
71378f5fc19da719edcd8dfca920837bde7ce1d3accacerion      &vcvt_cb,
71388f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
71398f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
71408f5fc19da719edcd8dfca920837bde7ce1d3accacerion      "vcfux", /* One reg, one 5-bit uimm argument */
71418f5fc19da719edcd8dfca920837bde7ce1d3accacerion      &vcvt_cb,
71428f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
71438f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
71448f5fc19da719edcd8dfca920837bde7ce1d3accacerion      "vctsxs", /* One reg, one 5-bit uimm argument */
71458f5fc19da719edcd8dfca920837bde7ce1d3accacerion      &vcvt_cb,
71468f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
71478f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
71488f5fc19da719edcd8dfca920837bde7ce1d3accacerion      NULL,
71498f5fc19da719edcd8dfca920837bde7ce1d3accacerion      NULL,
71508f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
71518f5fc19da719edcd8dfca920837bde7ce1d3accacerion};
71528f5fc19da719edcd8dfca920837bde7ce1d3accacerion
71538f5fc19da719edcd8dfca920837bde7ce1d3accacerionstatic void test_av_float_special (const char* name, test_func_t func,
71548f5fc19da719edcd8dfca920837bde7ce1d3accacerion                                   uint32_t test_flags)
71558f5fc19da719edcd8dfca920837bde7ce1d3accacerion{
71568f5fc19da719edcd8dfca920837bde7ce1d3accacerion   test_special(special_av_float_ops, name, func, test_flags);
71578f5fc19da719edcd8dfca920837bde7ce1d3accacerion}
71588f5fc19da719edcd8dfca920837bde7ce1d3accacerion
7159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
7160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
7161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
7162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t altivec_float_loops[] = {
7163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_one_arg,
7164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_two_args,
7165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_three_args,
7166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_two_args,
7167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
71698f5fc19da719edcd8dfca920837bde7ce1d3accacerion   &test_av_float_special,
7170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
7175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7176f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
7177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
7180530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_ppc405 (const char* name, test_func_t func,
7181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                         unused uint32_t test_flags)
7182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
7184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k;
7185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
7187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
7188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_iargs; k++) {
7189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r14 = iargs[i];
7190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r15 = iargs[j];
7191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Beware: the third argument and the result
7192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             * are in the same register
7193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             */
7194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r17 = iargs[k];
7195b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
7197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
7198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpcr = r18;
7199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfxer 18");
7200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpxer = r18;
7201b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Set up flags for test */
7203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = 0;
7204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 18");
7205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
7206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
7207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
7208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = r18;
7209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfxer 18");
7210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            xer = r18;
7211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            res = r17;
7212b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
7214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpcr;
7215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 18");
7216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpxer;
7217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
7218b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n",
7220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   name, iargs[i], iargs[j], iargs[k], res, flags, xer);
7221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
7223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
7227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7228530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic int check_filter (char *filter)
7229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7230530f73578552bc876a51fbf90cb6be29769bb362sewardj   char *c;
7231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int ret = 1;
7232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (filter != NULL) {
7234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      c = strchr(filter, '*');
7235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (c != NULL) {
7236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         *c = '\0';
7237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ret = 0;
7238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   return ret;
7242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7244530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic int check_name (const char* name, const char *filter,
7245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                       int exact)
7246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int nlen, flen;
7248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int ret = 0;
7249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (filter != NULL) {
7251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (; isspace(*name); name++)
7252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      FDPRINTF("Check '%s' againt '%s' (%s match)\n",
7254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               name, filter, exact ? "exact" : "starting");
7255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      nlen = strlen(name);
7256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flen = strlen(filter);
7257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (exact) {
7258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (nlen == flen && memcmp(name, filter, flen) == 0)
7259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            ret = 1;
7260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      } else {
7261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (flen <= nlen && memcmp(name, filter, flen) == 0)
7262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            ret = 1;
7263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {
7265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ret = 1;
7266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   return ret;
7268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct insn_sel_flags_t_struct {
7273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int one_arg, two_args, three_args;
7274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int arith, logical, compare, ldst;
7275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int integer, floats, p405, altivec, faltivec;
7276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int cr;
7277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} insn_sel_flags_t;
7278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void do_tests ( insn_sel_flags_t seln_flags,
7280530f73578552bc876a51fbf90cb6be29769bb362sewardj                       char *filter)
7281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
7283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_loop_t tmpl;
7284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_loop_t *loop;
7286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_t *tests;
7287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int nb_args, type, family;
7288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, n;
7289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int exact;
7290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exact = check_filter(filter);
7292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   n = 0;
7293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; all_tests[i].name != NULL; i++) {
7294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      nb_args = all_tests[i].flags & PPC_NB_ARGS;
7295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check number of arguments */
7296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if ((nb_args == 1 && !seln_flags.one_arg) ||
7297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (nb_args == 2 && !seln_flags.two_args) ||
7298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (nb_args == 3 && !seln_flags.three_args))
7299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check instruction type */
7301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      type = all_tests[i].flags & PPC_TYPE;
7302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if ((type == PPC_ARITH   && !seln_flags.arith) ||
7303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (type == PPC_LOGICAL && !seln_flags.logical) ||
7304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (type == PPC_COMPARE && !seln_flags.compare) ||
7305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (type == PPC_LDST && !seln_flags.ldst))
7306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check instruction family */
7308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      family = all_tests[i].flags & PPC_FAMILY;
7309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if ((family == PPC_INTEGER  && !seln_flags.integer) ||
7310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_FLOAT    && !seln_flags.floats) ||
7311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_405      && !seln_flags.p405) ||
7312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_ALTIVEC  && !seln_flags.altivec) ||
7313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_FALTIVEC && !seln_flags.faltivec))
7314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check flags update */
7316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (((all_tests[i].flags & PPC_CR)  && seln_flags.cr == 0) ||
7317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (!(all_tests[i].flags & PPC_CR) && seln_flags.cr == 1))
7318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* All passed, do the tests */
7320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tests = all_tests[i].tests;
7321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Select the test loop */
7322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      switch (family) {
7323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_INTEGER:
7324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &int_loops[nb_args - 1];
7325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_FLOAT:
7327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
7328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &float_loops[nb_args - 1];
7329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
7332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "PPC floating point instructions tests "
7333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "are disabled on your host\n");
7334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
7335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_405:
7337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
7338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpl = &test_ppc405;
7339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &tmpl;
7340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
7343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "PPC405 instructions tests are disabled on your host\n");
7344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
7346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_ALTIVEC:
7347f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
7348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &altivec_int_loops[nb_args - 1];
7349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
7352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "Altivec instructions tests are disabled on your host\n");
7353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_FALTIVEC:
7356f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
7357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &altivec_float_loops[nb_args - 1];
7358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
7361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "Altivec float instructions tests "
7362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "are disabled on your host\n");
7363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      default:
7366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("ERROR: unknown insn family %08x\n", family);
7367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (1 || verbose > 0)
7370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:\n", all_tests[i].name);
7371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; tests[j].name != NULL; j++) {
7372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (check_name(tests[j].name, filter, exact)) {
7373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            if (verbose > 1)
7374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               printf("Test instruction %s\n", tests[j].name);
7375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*loop)(tests[j].name, tests[j].func, all_tests[i].flags);
7376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("\n");
7377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            n++;
7378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        }
7380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
7381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   printf("All done. Tested %d different instructions\n", n);
7383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void usage (void)
7387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (USAGE_SIMPLE)
7389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   fprintf(stderr,
7390f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion           "jm-insns [-1] [-2] [-3] [-*] [-t <type>] [-f <family>] [-u] "
7391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "[-n <filter>] [-r <test_rigour>] [-h]\n"
7392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-1: test opcodes with one argument\n"
7393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-2: test opcodes with two arguments\n"
7394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-3: test opcodes with three arguments\n"
7395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-*: launch test without checking the number of arguments\n"
7396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-t: launch test for instructions of type <type>\n"
7397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    recognized types:\n"
7398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tarith (or a)\n"
7399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tlogical (or l)\n"
7400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tcompare (or c)\n"
7401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tstoreload (or s)\n"
7402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-f: launch test for instructions of family <family>\n"
7403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    recognized families:\n"
7404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tinteger (or i)\n"
7405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tfloat (or f)\n"
7406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tppc405 (or mac)\n"
7407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\taltivec (or a)\n"
7408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-u: test instructions that update flags\n"
7409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-n: filter instructions with <filter>\n"
7410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    <filter> can be in two forms:\n"
7411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tname  : filter functions that exactly match <name>\n"
7412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tname* : filter functions that start with <name>\n"
7413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-r: set size of arg tables to use to define <test_rigour>\n"
7414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    recognized types:\n"
7415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tlarge (or l)\n"
7416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tsmall (or s) - default\n"
7417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-v: verbose (-v -v for more)\n"
7418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-h: print this help\n"
7419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           );
7420b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#else // #if !defined (USAGE_SIMPLE)
7421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   fprintf(stderr,
742257c3e5d80627eb327f15e059f85ecef735159ab5cerion           "Usage: jm-insns [OPTION]\n"
742357c3e5d80627eb327f15e059f85ecef735159ab5cerion           "\t-i: test integer instructions (default)\n"
742457c3e5d80627eb327f15e059f85ecef735159ab5cerion           "\t-f: test floating point instructions\n"
742557c3e5d80627eb327f15e059f85ecef735159ab5cerion           "\t-a: test altivec instructions\n"
7426e1494c6807bd1744d615ce52d97599168eddb2edsewardj           "\t-A: test all (int, fp, altivec) instructions\n"
742757c3e5d80627eb327f15e059f85ecef735159ab5cerion           "\t-v: be verbose\n"
742857c3e5d80627eb327f15e059f85ecef735159ab5cerion           "\t-h: display this help and exit\n"
7429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           );
7430b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#endif // #if !defined (USAGE_SIMPLE)
7431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
743357c3e5d80627eb327f15e059f85ecef735159ab5cerion
7434b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjint main (int argc, char **argv)
7436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (USAGE_SIMPLE)
743857c3e5d80627eb327f15e059f85ecef735159ab5cerion////////////////////////////////////////////////////////////////////////
7439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   unsigned char *tmp, *filter = NULL;
7440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   insn_sel_flags_t flags;
7441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int c;
7442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7443e1494c6807bd1744d615ce52d97599168eddb2edsewardj   // check HWord_t really is a host word
7444e1494c6807bd1744d615ce52d97599168eddb2edsewardj   assert(sizeof(void*) == sizeof(HWord_t));
7445e1494c6807bd1744d615ce52d97599168eddb2edsewardj
7446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.one_arg    = 0;
7447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.two_args   = 0;
7448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.three_args = 0;
7449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.arith      = 0;
7450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.logical    = 0;
7451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.compare    = 0;
7452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.ldst       = 0;
7453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.integer    = 0;
7454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.floats     = 0;
7455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.p405       = 0;
7456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.altivec    = 0;
7457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.faltivec   = 0;
7458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.cr         = -1;
7459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   while ((c = getopt(argc, argv, "123t:f:n:r:uvh")) != -1) {
7461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      switch (c) {
7462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case '1':
7463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.one_arg = 1;
7464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case '2':
7466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.two_args = 1;
7467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case '3':
7469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.three_args = 1;
7470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 't':
7472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmp = optarg;
7473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (strcmp(tmp, "arith") == 0 || strcmp(tmp, "a") == 0) {
7474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.arith = 1;
7475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "logical") == 0 || strcmp(tmp, "l") == 0) {
7476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.logical = 1;
7477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "compare") == 0 || strcmp(tmp, "c") == 0) {
7478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.compare = 1;
7479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "storeload") == 0 || strcmp(tmp, "s") == 0) {
7480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.ldst = 1;
7481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else {
7482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            goto bad_arg;
7483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'f':
7486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmp = optarg;
7487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (strcmp(tmp, "integer") == 0 || strcmp(tmp, "i") == 0) {
7488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.integer = 1;
7489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "float") == 0 || strcmp(tmp, "f") == 0) {
7490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.floats = 1;
7491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "ppc405") == 0 || strcmp(tmp, "mac") == 0) {
7492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.p405 = 1;
7493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "altivec") == 0 || strcmp(tmp, "a") == 0) {
7494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.altivec = 1;
7495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.faltivec = 1;
7496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else {
7497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            goto bad_arg;
7498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'n':
7501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         filter = optarg;
7502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'r':
7504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmp = optarg;
7505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (strcmp(tmp, "large") == 0 || strcmp(tmp, "l") == 0) {
7506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            arg_list_size = 1;
7507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "small") == 0 || strcmp(tmp, "s") == 0) {
7508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            arg_list_size = 0;
7509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else {
7510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            goto bad_arg;
7511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'u':
7515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.cr = 1;
7516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'h':
7518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
7519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 0;
7520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'v':
7521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         verbose++;
7522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      default:
7524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
7525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Unknown argument: '%c'\n", c);
7526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 1;
7527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      bad_arg:
7528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
7529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Bad argument for '%c': '%s'\n", c, tmp);
7530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 1;
7531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (argc != optind) {
7534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      usage();
7535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fprintf(stderr, "Bad number of arguments\n");
7536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      return 1;
7537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default n_args
7540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.one_arg == 0 && flags.two_args == 0 && flags.three_args == 0) {
7541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.one_arg = 1;
7542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.two_args = 1;
7543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.three_args = 1;
7544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default type
7546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.arith == 0 && flags.logical == 0 &&
7547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj       flags.compare == 0 && flags.ldst == 0) {
7548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.arith   = 1;
7549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.logical = 1;
7550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.compare = 1;
7551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.ldst    = 1;
7552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default family
7554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.integer == 0 && flags.floats == 0 &&
7555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj       flags.p405 == 0 && flags.altivec == 0 && flags.faltivec == 0) {
7556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.integer  = 1;
7557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.floats   = 1;
7558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.p405     = 1;
7559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.altivec  = 1;
7560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.faltivec = 1;
7561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default cr update
7563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.cr == -1)
7564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.cr = 2;       // both
7565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7566b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#else // #if !defined (USAGE_SIMPLE)
756757c3e5d80627eb327f15e059f85ecef735159ab5cerion////////////////////////////////////////////////////////////////////////
7568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Simple usage:
756957c3e5d80627eb327f15e059f85ecef735159ab5cerion      ./jm-insns -i   => int insns
757057c3e5d80627eb327f15e059f85ecef735159ab5cerion      ./jm-insns -f   => fp  insns
757157c3e5d80627eb327f15e059f85ecef735159ab5cerion      ./jm-insns -a   => av  insns
7572e1494c6807bd1744d615ce52d97599168eddb2edsewardj      ./jm-insns -A   => int, fp and avinsns
7573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   */
7574530f73578552bc876a51fbf90cb6be29769bb362sewardj   char *filter = NULL;
7575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   insn_sel_flags_t flags;
7576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int c;
7577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Args
7579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.one_arg    = 1;
7580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.two_args   = 1;
7581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.three_args = 1;
7582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Type
7583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.arith      = 1;
7584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.logical    = 1;
7585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.compare    = 1;
7586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.ldst       = 1;
7587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Family
758857c3e5d80627eb327f15e059f85ecef735159ab5cerion   flags.integer    = 0;
7589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.floats     = 0;
7590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.p405       = 0;
7591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.altivec    = 0;
7592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.faltivec   = 0;
7593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Flags
7594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.cr         = 2;
7595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7596e1494c6807bd1744d615ce52d97599168eddb2edsewardj   while ((c = getopt(argc, argv, "ifahvA")) != -1) {
7597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      switch (c) {
759857c3e5d80627eb327f15e059f85ecef735159ab5cerion      case 'i':
759957c3e5d80627eb327f15e059f85ecef735159ab5cerion         flags.integer  = 1;
760057c3e5d80627eb327f15e059f85ecef735159ab5cerion         break;
760157c3e5d80627eb327f15e059f85ecef735159ab5cerion      case 'f':
760257c3e5d80627eb327f15e059f85ecef735159ab5cerion         flags.floats   = 1;
760357c3e5d80627eb327f15e059f85ecef735159ab5cerion         break;
7604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'a':
7605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.altivec  = 1;
760605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         flags.faltivec = 1;
7607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7608e1494c6807bd1744d615ce52d97599168eddb2edsewardj      case 'A':
7609e1494c6807bd1744d615ce52d97599168eddb2edsewardj         flags.integer  = 1;
7610e1494c6807bd1744d615ce52d97599168eddb2edsewardj         flags.floats   = 1;
7611e1494c6807bd1744d615ce52d97599168eddb2edsewardj         flags.altivec  = 1;
7612e1494c6807bd1744d615ce52d97599168eddb2edsewardj         flags.faltivec = 1;
7613e1494c6807bd1744d615ce52d97599168eddb2edsewardj         break;
7614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'h':
7615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
7616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 0;
7617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'v':
7618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         verbose++;
7619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      default:
7621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
7622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Unknown argument: '%c'\n", c);
7623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 1;
7624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   arg_list_size = 0;
7628b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#endif // #if !defined (USAGE_SIMPLE)
7629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   build_iargs_table();
7632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   build_fargs_table();
7633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   build_ii16_table();
7634f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
7635b5b6311a5312378c0129587d0dc0b255188a1d53sewardj   if (flags.altivec || flags.faltivec) {
7636b5b6311a5312378c0129587d0dc0b255188a1d53sewardj      build_viargs_table();
7637b5b6311a5312378c0129587d0dc0b255188a1d53sewardj      build_vfargs_table();
7638b5b6311a5312378c0129587d0dc0b255188a1d53sewardj   }
7639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // dump_iargs();
7641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // dump_iargs16();
7642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // dump_vfargs();
7643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose > 1) {
7645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("\nInstruction Selection:\n");
7646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  n_args: \n");
7647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    one_arg    = %d\n", flags.one_arg);
7648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    two_args   = %d\n", flags.two_args);
7649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    three_args = %d\n", flags.three_args);
7650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  type: \n");
7651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    arith      = %d\n", flags.arith);
7652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    logical    = %d\n", flags.logical);
7653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    compare    = %d\n", flags.compare);
7654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    ldst       = %d\n", flags.ldst);
7655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  family: \n");
7656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    integer    = %d\n", flags.integer);
7657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    floats     = %d\n", flags.floats);
7658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    p405       = %d\n", flags.p405);
7659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    altivec    = %d\n", flags.altivec);
7660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    faltivec   = %d\n", flags.faltivec);
7661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  cr update: \n");
7662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    cr         = %d\n", flags.cr);
7663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("\n");
7664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  num args: \n");
7665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    iargs      - %d\n", nb_iargs);
7666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    fargs      - %d\n", nb_fargs);
7667f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
7668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    viargs     - %d\n", nb_viargs);
7669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    vfargs     - %d\n", nb_vfargs);
7670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("\n");
7672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   do_tests( flags, filter );
7675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   return 0;
7677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7678