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
197b8ef5e3d2b4757e0e19e6a446448315be189f84carll *
20a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Copyright (c) 2005 Jocelyn Mayer
217b8ef5e3d2b4757e0e19e6a446448315be189f84carll *
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
171f13107a45926fa51c6eed7141192597077003d06carll#include "./opcodes.h"
17252675269f43c06380b04bf502c509cca4ee643b6cerion
173e4f74838b9b2bbaaaca08117214194ec368caf95bart#define STATIC_ASSERT(e) sizeof(struct { int:-!(e); })
174e4f74838b9b2bbaaaca08117214194ec368caf95bart
17552675269f43c06380b04bf502c509cca4ee643b6cerion/* Something of the same size as void*, so can be safely be coerced
176482d35c0fad2f5452db44154f3740838f49e4c76bart * to/from a pointer type. Also same size as the host's gp registers.
177482d35c0fad2f5452db44154f3740838f49e4c76bart * According to the AltiVec section of the GCC manual, the syntax does
178482d35c0fad2f5452db44154f3740838f49e4c76bart * not allow the use of a typedef name as a type specifier in conjunction
179482d35c0fad2f5452db44154f3740838f49e4c76bart * with the vector keyword, so typedefs uint[32|64]_t are #undef'ed here
180482d35c0fad2f5452db44154f3740838f49e4c76bart * and redefined using #define.
181482d35c0fad2f5452db44154f3740838f49e4c76bart */
182482d35c0fad2f5452db44154f3740838f49e4c76bart#undef uint32_t
183e4f74838b9b2bbaaaca08117214194ec368caf95bart#undef uint64_t
184482d35c0fad2f5452db44154f3740838f49e4c76bart#define uint32_t unsigned int
1852762a738523d6f37cab30c4b1fae6a30414a81f6sewardj#define uint64_t unsigned long long int
186e4f74838b9b2bbaaaca08117214194ec368caf95bart
187e4f74838b9b2bbaaaca08117214194ec368caf95bart#ifndef __powerpc64__
188e4f74838b9b2bbaaaca08117214194ec368caf95barttypedef uint32_t  HWord_t;
189e4f74838b9b2bbaaaca08117214194ec368caf95bart#else
190a2a583876ee4197d0284960aeb594dc75bce2f09ceriontypedef uint64_t  HWord_t;
191e4f74838b9b2bbaaaca08117214194ec368caf95bart#endif /* __powerpc64__ */
19252675269f43c06380b04bf502c509cca4ee643b6cerion
193e4f74838b9b2bbaaaca08117214194ec368caf95bartenum {
194e4f74838b9b2bbaaaca08117214194ec368caf95bart    compile_time_test1 = STATIC_ASSERT(sizeof(uint32_t) == 4),
195e4f74838b9b2bbaaaca08117214194ec368caf95bart    compile_time_test2 = STATIC_ASSERT(sizeof(uint64_t) == 8),
196e4f74838b9b2bbaaaca08117214194ec368caf95bart};
19752675269f43c06380b04bf502c509cca4ee643b6cerion
1985f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define ALLCR "cr0","cr1","cr2","cr3","cr4","cr5","cr6","cr7"
1995f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2005f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_CR(_arg) \
2015f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      __asm__ __volatile__ ("mtcr  %0" : : "b"(_arg) : ALLCR );
2025f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2035f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_XER(_arg) \
2045f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      __asm__ __volatile__ ("mtxer %0" : : "b"(_arg) : "xer" );
2055f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2065f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define GET_CR(_lval) \
2075f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      __asm__ __volatile__ ("mfcr %0"  : "=b"(_lval) )
2085f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2095f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define GET_XER(_lval) \
2105f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      __asm__ __volatile__ ("mfxer %0" : "=b"(_lval) )
2115f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2125f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define GET_CR_XER(_lval_cr,_lval_xer) \
2135f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   do { GET_CR(_lval_cr); GET_XER(_lval_xer); } while (0)
2145f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2155f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_CR_ZERO \
2165f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR(0)
2175f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2185f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_XER_ZERO \
2195f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_XER(0)
2205f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2215f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_CR_XER_ZERO \
2225f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   do { SET_CR_ZERO; SET_XER_ZERO; } while (0)
2235f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2245f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj#define SET_FPSCR_ZERO \
2255f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   do { double _d = 0.0; \
2265f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj        __asm__ __volatile__ ("mtfsf 0xFF, %0" : : "f"(_d) ); \
2275f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   } while (0)
2285f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2295f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
2305f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj/* XXXX these must all be callee-save regs! */
2310e342a0c84f17f2e5ca3e244db36dba074fdd5d0sewardjregister double f14 __asm__ ("fr14");
2320e342a0c84f17f2e5ca3e244db36dba074fdd5d0sewardjregister double f15 __asm__ ("fr15");
2330e342a0c84f17f2e5ca3e244db36dba074fdd5d0sewardjregister double f16 __asm__ ("fr16");
2340e342a0c84f17f2e5ca3e244db36dba074fdd5d0sewardjregister double f17 __asm__ ("fr17");
23552675269f43c06380b04bf502c509cca4ee643b6cerionregister HWord_t r14 __asm__ ("r14");
23652675269f43c06380b04bf502c509cca4ee643b6cerionregister HWord_t r15 __asm__ ("r15");
23752675269f43c06380b04bf502c509cca4ee643b6cerionregister HWord_t r16 __asm__ ("r16");
23852675269f43c06380b04bf502c509cca4ee643b6cerionregister HWord_t r17 __asm__ ("r17");
239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
240f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#include "config.h"         // HAS_ALTIVEC
241f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#   include <altivec.h>
243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <assert.h>
245b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#include <ctype.h>     // isspace
246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdio.h>
247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdlib.h>
248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <string.h>
249b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#include <unistd.h>    // getopt
2508a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
25152675269f43c06380b04bf502c509cca4ee643b6cerion
252a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
2538a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#define ASSEMBLY_FUNC(__fname, __insn)     \
2548a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionasm(".section \".text\"\n"                 \
2558a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    "\t.align 2\n"                         \
2568a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    "\t.type "__fname",@function\n"        \
2578a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    __fname":\n"                           \
2588a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    "\t"__insn"\n"                         \
2598a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    "\tblr\n"                              \
2608a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    "\t.previous\n"                        \
2618a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    )
262a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
263dd690bf8d81c9119a7228446be12e3366e202176carll#if defined(VGP_ppc64be_linux)
264a2a583876ee4197d0284960aeb594dc75bce2f09cerion#define ASSEMBLY_FUNC(__fname, __insn)     \
265a2a583876ee4197d0284960aeb594dc75bce2f09cerionasm(".section  \".text\"\n"                \
266a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.align 2\n"                         \
267a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.global "__fname"\n"                \
268a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.section \".opd\",\"aw\"\n"         \
269a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.align 3\n"                         \
270a2a583876ee4197d0284960aeb594dc75bce2f09cerion    ""__fname":\n"                         \
271a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.quad ."__fname",.TOC.@tocbase,0\n" \
272a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.previous\n"                        \
273a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.type ."__fname",@function\n"       \
274a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t.global  ."__fname"\n"              \
275a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "."__fname":\n"                        \
276a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\t"__insn"\n"                         \
277a2a583876ee4197d0284960aeb594dc75bce2f09cerion    "\tblr\n"                              \
278a2a583876ee4197d0284960aeb594dc75bce2f09cerion    )
279dd690bf8d81c9119a7228446be12e3366e202176carll#elif defined(VGP_ppc64le_linux)
280dd690bf8d81c9119a7228446be12e3366e202176carll#define ASSEMBLY_FUNC(__fname, __insn)     \
281dd690bf8d81c9119a7228446be12e3366e202176carllasm(".section  \".text\"\n"         \
282dd690bf8d81c9119a7228446be12e3366e202176carll    "\t.align 2\n"                         \
283dd690bf8d81c9119a7228446be12e3366e202176carll    "\t.global "__fname"\n"                \
284dd690bf8d81c9119a7228446be12e3366e202176carll    ""__fname":\n"                         \
285dd690bf8d81c9119a7228446be12e3366e202176carll    "\t"__insn"\n"                         \
286dd690bf8d81c9119a7228446be12e3366e202176carll    "\tblr\n"                              \
287dd690bf8d81c9119a7228446be12e3366e202176carll    )
288dd690bf8d81c9119a7228446be12e3366e202176carll#endif // VGP_ppc64 or VGP_ppc64le
289a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifndef __powerpc64__
2908a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
2918a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
2927c01859c190613f313f57fc4b1c6bb14124b00c7sewardj/* Return a pointer to a 1-page area where is is safe to both write
2937c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   and execute instructions.  Area is filled with 'trap' insns. */
2947c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic
2957c01859c190613f313f57fc4b1c6bb14124b00c7sewardjuint32_t* get_rwx_area ( void )
2967c01859c190613f313f57fc4b1c6bb14124b00c7sewardj{
2977c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   int i;
2987c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   static uint32_t* p = NULL;
2997c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   if (p == NULL) {
3007c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      p = mmap(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
3017c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                           MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
3027c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      assert(p != MAP_FAILED);
3037c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   }
3047c01859c190613f313f57fc4b1c6bb14124b00c7sewardj
3057c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   for (i = 0; i < 4096/sizeof(uint32_t); i++)
3067c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      p[i] = 0x7fe00008; /* trap */
3077c01859c190613f313f57fc4b1c6bb14124b00c7sewardj
3087c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   return p;
3097c01859c190613f313f57fc4b1c6bb14124b00c7sewardj}
3107c01859c190613f313f57fc4b1c6bb14124b00c7sewardj
311b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- BEGIN #include "test-ppc.h" -------------- */
313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/*
314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * test-ppc.h:
315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * PPC tests for qemu-PPC CPU emulation checks - definitions
316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Copyright (c) 2005 Jocelyn Mayer
318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   This program is free software; you can redistribute it and/or
320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   modify it under the terms of the GNU General Public License V2
321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   as published by the Free Software Foundation
322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   This program is distributed in the hope that it will be useful,
324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   but WITHOUT ANY WARRANTY; without even the implied warranty of
325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   GNU General Public License for more details.
327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   You should have received a copy of the GNU General Public License
329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   along with this program; if not, write to the Free Software
330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (__TEST_PPC_H__)
334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define __TEST_PPC_H__
335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdint.h>
337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef void (*test_func_t) (void);
339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct test_t test_t;
340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct test_table_t test_table_t;
341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct test_t {
342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    test_func_t func;
343530f73578552bc876a51fbf90cb6be29769bb362sewardj    const char *name;
344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct test_table_t {
347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    test_t *tests;
348530f73578552bc876a51fbf90cb6be29769bb362sewardj    const char *name;
349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    uint32_t flags;
350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
352530f73578552bc876a51fbf90cb6be29769bb362sewardjtypedef void (*test_loop_t) (const char *name, test_func_t func,
353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                             uint32_t flags);
354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjenum test_flags {
356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Nb arguments */
357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ONE_ARG    = 0x00000001,
358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_TWO_ARGS   = 0x00000002,
359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_THREE_ARGS = 0x00000003,
360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CMP_ARGS   = 0x00000004,  // family: compare
361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CMPI_ARGS  = 0x00000005,  // family: compare
362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_TWO_I16    = 0x00000006,  // family: arith/logical
363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_SPECIAL    = 0x00000007,  // family: logical
364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LD_ARGS    = 0x00000008,  // family: ldst
365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LDX_ARGS   = 0x00000009,  // family: ldst
366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ST_ARGS    = 0x0000000A,  // family: ldst
367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_STX_ARGS   = 0x0000000B,  // family: ldst
368074637e5b8af220614f9727bccc177e482b7ddc5carll    PPC_ONE_IMM    = 0x0000000C,  // PPC_MISC family
369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_NB_ARGS    = 0x0000000F,
370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Type */
371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ARITH      = 0x00000100,
372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LOGICAL    = 0x00000200,
373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_COMPARE    = 0x00000300,
374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CROP       = 0x00000400,
375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LDST       = 0x00000500,
376a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe    PPC_POPCNT     = 0x00000600,
377074637e5b8af220614f9727bccc177e482b7ddc5carll    PPC_ANY        = 0x00000700,
378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_TYPE       = 0x00000F00,
379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Family */
380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_INTEGER    = 0x00010000,
381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_FLOAT      = 0x00020000,
382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_405        = 0x00030000,
383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ALTIVEC    = 0x00040000,
384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_FALTIVEC   = 0x00050000,
385074637e5b8af220614f9727bccc177e482b7ddc5carll    PPC_MISC       = 0x00060000,
386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_FAMILY     = 0x000F0000,
387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Flags: these may be combined, so use separate bitfields. */
388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CR         = 0x01000000,
389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_XER_CA     = 0x02000000,
390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (__TEST_PPC_H__) */
393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- END #include "test-ppc.h" -------------- */
395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (DEBUG_ARGS_BUILD)
400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define AB_DPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0)
401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define AB_DPRINTF(fmt, args...) do { } while (0)
403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (DEBUG_FILTER)
406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define FDPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0)
407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define FDPRINTF(fmt, args...) do { } while (0)
409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4118a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
412c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion/* Produce the 64-bit pattern corresponding to the supplied double. */
413c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic uint64_t double_to_bits ( double d )
414c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
415c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   union { uint64_t i; double d; } u;
416c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(8 == sizeof(uint64_t));
417c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(8 == sizeof(double));
418c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(8 == sizeof(u));
419c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   u.d = d;
420c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   return u.i;
421c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
422c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
423c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if 0
424c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic float bits_to_float ( uint32_t i )
425c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
426c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   union { uint32_t i; float f; } u;
427c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(4 == sizeof(uint32_t));
428c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(4 == sizeof(float));
429c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   assert(4 == sizeof(u));
430c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   u.i = i;
431c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   return u.f;
432c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
433c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif
434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4358a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
436f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4378a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionstatic void AB_DPRINTF_VEC32x4 ( vector unsigned int v )
4388a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion{
4398a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#if defined (DEBUG_ARGS_BUILD)
4408a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   int i;
4418a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   unsigned int* p_int = (unsigned int*)&v;
4428a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   AB_DPRINTF("val");
4438a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   for (i=0; i<4; i++) {
4448a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion      AB_DPRINTF(" %08x", p_int[i]);
4458a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   }
4468a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   AB_DPRINTF("\n");
4478a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#endif
4488a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion}
4498a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#endif
4508a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
4518a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define unused __attribute__ (( unused ))
453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4548a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- BEGIN #include "ops-ppc.c" -------------- */
456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* #include "test-ppc.h" */
458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_add (void)
460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("add          17, 14, 15");
462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addo (void)
465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addo         17, 14, 15");
467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addc (void)
470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addc         17, 14, 15");
472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addco (void)
475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addco        17, 14, 15");
477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divw (void)
480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divw         17, 14, 15");
482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwo (void)
485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwo        17, 14, 15");
487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwu (void)
490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwu        17, 14, 15");
492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwuo (void)
495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwuo       17, 14, 15");
497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhw (void)
500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhw        17, 14, 15");
502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhwu (void)
505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhwu       17, 14, 15");
507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullw (void)
510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullw        17, 14, 15");
512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullwo (void)
515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullwo       17, 14, 15");
517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subf (void)
520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subf         17, 14, 15");
522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfo (void)
525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfo        17, 14, 15");
527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfc (void)
530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfc        17, 14, 15");
532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfco (void)
535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfco       17, 14, 15");
537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
539a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
540a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulld (void)
541a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
542a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulld        17, 14, 15");
543a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
544a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5452cc17eaccf56353d5028b99a105cfcec854dae1dcarllstatic void test_mulldo (void)
5462cc17eaccf56353d5028b99a105cfcec854dae1dcarll{
5472cc17eaccf56353d5028b99a105cfcec854dae1dcarll    __asm__ __volatile__ ("mulldo        17, 14, 15");
5482cc17eaccf56353d5028b99a105cfcec854dae1dcarll}
5492cc17eaccf56353d5028b99a105cfcec854dae1dcarll
550a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulhd (void)
551a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
552a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulhd        17, 14, 15");
553a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
554a2a583876ee4197d0284960aeb594dc75bce2f09cerion
555a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulhdu (void)
556a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
557a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulhdu       17, 14, 15");
558a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
559a2a583876ee4197d0284960aeb594dc75bce2f09cerion
560a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_divd (void)
561a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
562a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("divd         17, 14, 15");
563a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
564a2a583876ee4197d0284960aeb594dc75bce2f09cerion
565a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_divdu (void)
566a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
567a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("divdu        17, 14, 15");
568a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
5699237e27cb26897344d4707497180f78c80a3b0a2carll
5709237e27cb26897344d4707497180f78c80a3b0a2carllstatic void test_divdo (void)
5719237e27cb26897344d4707497180f78c80a3b0a2carll{
5729237e27cb26897344d4707497180f78c80a3b0a2carll    __asm__ __volatile__ ("divdo        17, 14, 15");
5739237e27cb26897344d4707497180f78c80a3b0a2carll}
5749237e27cb26897344d4707497180f78c80a3b0a2carll
5759237e27cb26897344d4707497180f78c80a3b0a2carllstatic void test_divduo (void)
5769237e27cb26897344d4707497180f78c80a3b0a2carll{
5779237e27cb26897344d4707497180f78c80a3b0a2carll    __asm__ __volatile__ ("divduo        17, 14, 15");
5789237e27cb26897344d4707497180f78c80a3b0a2carll}
579a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
580a2a583876ee4197d0284960aeb594dc75bce2f09cerion
581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ia_ops_two[] = {
582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_add             , "         add", },
583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addo            , "        addo", },
584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addc            , "        addc", },
585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addco           , "       addco", },
586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divw            , "        divw", },
587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwo           , "       divwo", },
588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwu           , "       divwu", },
589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwuo          , "      divwuo", },
590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhw           , "       mulhw", },
591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhwu          , "      mulhwu", },
592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullw           , "       mullw", },
593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullwo          , "      mullwo", },
594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subf            , "        subf", },
595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfo           , "       subfo", },
596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfc           , "       subfc", },
597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfco          , "      subfco", },
598a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
599a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulhd           , "       mulhd", },
600a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulhdu          , "      mulhdu", },
601a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulld           , "       mulld", },
6022cc17eaccf56353d5028b99a105cfcec854dae1dcarll    { &test_mulldo          , "      mulldo", },
603a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_divd            , "        divd", },
604a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_divdu           , "       divdu", },
6059237e27cb26897344d4707497180f78c80a3b0a2carll    { &test_divdo           , "       divdo", },
6069237e27cb26897344d4707497180f78c80a3b0a2carll    { &test_divduo          , "      divduo", },
607a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_add_ (void)
612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("add.         17, 14, 15");
614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addo_ (void)
617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addo.        17, 14, 15");
619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addc_ (void)
622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addc.        17, 14, 15");
624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addco_ (void)
627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addco.       17, 14, 15");
629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divw_ (void)
632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divw.        17, 14, 15");
634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwo_ (void)
637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwo.       17, 14, 15");
639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwu_ (void)
642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwu.       17, 14, 15");
644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwuo_ (void)
647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwuo.      17, 14, 15");
649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhw_ (void)
652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhw.       17, 14, 15");
654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhwu_ (void)
657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhwu.      17, 14, 15");
659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullw_ (void)
662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullw.       17, 14, 15");
664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullwo_ (void)
667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullwo.      17, 14, 15");
669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subf_ (void)
672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subf.        17, 14, 15");
674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfo_ (void)
677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfo.       17, 14, 15");
679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfc_ (void)
682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfc.       17, 14, 15");
684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfco_ (void)
687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfco.      17, 14, 15");
689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
691a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
692a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulhd_ (void)
693a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
694a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulhd.       17, 14, 15");
695a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
696a2a583876ee4197d0284960aeb594dc75bce2f09cerion
697a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulhdu_ (void)
698a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
699a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulhdu.      17, 14, 15");
700a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
701a2a583876ee4197d0284960aeb594dc75bce2f09cerion
702a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_mulld_ (void)
703a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
704a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("mulld.       17, 14, 15");
705a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
706a2a583876ee4197d0284960aeb594dc75bce2f09cerion
7072cc17eaccf56353d5028b99a105cfcec854dae1dcarllstatic void test_mulldo_ (void)
7082cc17eaccf56353d5028b99a105cfcec854dae1dcarll{
7092cc17eaccf56353d5028b99a105cfcec854dae1dcarll    __asm__ __volatile__ ("mulldo.       17, 14, 15");
7102cc17eaccf56353d5028b99a105cfcec854dae1dcarll}
7112cc17eaccf56353d5028b99a105cfcec854dae1dcarll
712a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_divd_ (void)
713a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
714a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("divd.        17, 14, 15");
715a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
716a2a583876ee4197d0284960aeb594dc75bce2f09cerion
717a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_divdu_ (void)
718a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
719a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("divdu.       17, 14, 15");
720a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
7219237e27cb26897344d4707497180f78c80a3b0a2carll
7229237e27cb26897344d4707497180f78c80a3b0a2carllstatic void test_divdo_ (void)
7239237e27cb26897344d4707497180f78c80a3b0a2carll{
7249237e27cb26897344d4707497180f78c80a3b0a2carll    __asm__ __volatile__ ("divdo.        17, 14, 15");
7259237e27cb26897344d4707497180f78c80a3b0a2carll}
7269237e27cb26897344d4707497180f78c80a3b0a2carll
7279237e27cb26897344d4707497180f78c80a3b0a2carllstatic void test_divduo_ (void)
7289237e27cb26897344d4707497180f78c80a3b0a2carll{
7299237e27cb26897344d4707497180f78c80a3b0a2carll    __asm__ __volatile__ ("divduo.       17, 14, 15");
7309237e27cb26897344d4707497180f78c80a3b0a2carll}
731a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
732a2a583876ee4197d0284960aeb594dc75bce2f09cerion
733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iar_ops_two[] = {
734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_add_            , "        add.", },
735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addo_           , "       addo.", },
736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addc_           , "       addc.", },
737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addco_          , "      addco.", },
738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divw_           , "       divw.", },
739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwo_          , "      divwo.", },
740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwu_          , "      divwu.", },
741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwuo_         , "     divwuo.", },
742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhw_          , "      mulhw.", },
743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhwu_         , "     mulhwu.", },
744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullw_          , "      mullw.", },
745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullwo_         , "     mullwo.", },
746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subf_           , "       subf.", },
747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfo_          , "      subfo.", },
748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfc_          , "      subfc.", },
749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfco_         , "     subfco.", },
750a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
751a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulhd_          , "      mulhd.", },
752a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulhdu_         , "     mulhdu.", },
753a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_mulld_          , "      mulld.", },
7542cc17eaccf56353d5028b99a105cfcec854dae1dcarll    { &test_mulldo_          , "    mulldo.", },
755a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_divd_           , "       divd.", },
756a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_divdu_          , "      divdu.", },
7579237e27cb26897344d4707497180f78c80a3b0a2carll    { &test_divdo_          , "      divdo.", },
7589237e27cb26897344d4707497180f78c80a3b0a2carll    { &test_divduo_         , "     divduo.", },
759a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_adde (void)
764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("adde         17, 14, 15");
766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addeo (void)
769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addeo        17, 14, 15");
771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfe (void)
774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfe        17, 14, 15");
776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfeo (void)
779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfeo       17, 14, 15");
781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iac_ops_two[] = {
784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_adde            , "        adde", },
785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addeo           , "       addeo", },
786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfe           , "       subfe", },
787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfeo          , "      subfeo", },
788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_adde_ (void)
792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("adde.        17, 14, 15");
794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addeo_ (void)
797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addeo.       17, 14, 15");
799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfe_ (void)
802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfe.       17, 14, 15");
804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfeo_ (void)
807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfeo.      17, 14, 15");
809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iacr_ops_two[] = {
812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_adde_           , "       adde.", },
813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addeo_          , "      addeo.", },
814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfe_          , "      subfe.", },
815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfeo_         , "     subfeo.", },
816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_and (void)
820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("and          17, 14, 15");
822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andc (void)
825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("andc         17, 14, 15");
827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_eqv (void)
830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("eqv          17, 14, 15");
832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nand (void)
835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nand         17, 14, 15");
837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nor (void)
840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nor          17, 14, 15");
842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_or (void)
845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("or           17, 14, 15");
847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_orc (void)
850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("orc          17, 14, 15");
852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xor (void)
855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("xor          17, 14, 15");
857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_slw (void)
860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("slw          17, 14, 15");
862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sraw (void)
865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sraw         17, 14, 15");
867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srw (void)
870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("srw          17, 14, 15");
872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
874a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
875a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_sld (void)
876a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
877a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("sld          17, 14, 15");
878a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
879a2a583876ee4197d0284960aeb594dc75bce2f09cerion
880a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_srad (void)
881a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
882a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("srad         17, 14, 15");
883a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
884a2a583876ee4197d0284960aeb594dc75bce2f09cerion
885a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_srd (void)
886a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
887a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("srd          17, 14, 15");
888a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
889a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
890a2a583876ee4197d0284960aeb594dc75bce2f09cerion
891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_two[] = {
892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_and             , "         and", },
893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andc            , "        andc", },
894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_eqv             , "         eqv", },
895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nand            , "        nand", },
896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nor             , "         nor", },
897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_or              , "          or", },
898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_orc             , "         orc", },
899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xor             , "         xor", },
900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_slw             , "         slw", },
901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sraw            , "        sraw", },
902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srw             , "         srw", },
903a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
904a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_sld             , "         sld", },
905a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_srad            , "        srad", },
906a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_srd             , "         srd", },
907a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_and_ (void)
912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("and.         17, 14, 15");
914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andc_ (void)
917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("andc.        17, 14, 15");
919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_eqv_ (void)
922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("eqv.         17, 14, 15");
924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nand_ (void)
927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nand.        17, 14, 15");
929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nor_ (void)
932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nor.         17, 14, 15");
934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_or_ (void)
937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("or.          17, 14, 15");
939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_orc_ (void)
942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("orc.         17, 14, 15");
944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xor_ (void)
947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("xor.         17, 14, 15");
949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_slw_ (void)
952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("slw.         17, 14, 15");
954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sraw_ (void)
957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sraw.        17, 14, 15");
959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srw_ (void)
962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("srw.         17, 14, 15");
964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
966a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
967a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_sld_ (void)
968a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
969a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("sld.         17, 14, 15");
970a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
971a2a583876ee4197d0284960aeb594dc75bce2f09cerion
972a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_srad_ (void)
973a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
974a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("srad.        17, 14, 15");
975a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
976a2a583876ee4197d0284960aeb594dc75bce2f09cerion
977a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_srd_ (void)
978a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
979a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("srd.         17, 14, 15");
980a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
981a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
982a2a583876ee4197d0284960aeb594dc75bce2f09cerion
983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_two[] = {
984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_and_            , "        and.", },
985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andc_           , "       andc.", },
986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_eqv_            , "        eqv.", },
987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nand_           , "       nand.", },
988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nor_            , "        nor.", },
989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_or_             , "         or.", },
990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_orc_            , "        orc.", },
991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xor_            , "        xor.", },
992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_slw_            , "        slw.", },
993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sraw_           , "       sraw.", },
994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srw_            , "        srw.", },
995a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
996a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_sld_            , "        sld.", },
997a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_srad_           , "       srad.", },
998a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_srd_            , "        srd.", },
999a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
10038a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionstatic void test_cmpw (void)
1004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
10058a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    __asm__ __volatile__ ("cmpw         2, 14, 15");
1006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
10088a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionstatic void test_cmplw (void)
1009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
10108a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    __asm__ __volatile__ ("cmplw        2, 14, 15");
1011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1013a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1014a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_cmpd (void)
1015a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1016a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("cmpd         2, 14, 15");
1017a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1018a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1019a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_cmpld (void)
1020a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1021a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("cmpld        2, 14, 15");
1022a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1023a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1024a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_icr_ops_two[] = {
10268a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    { &test_cmpw            , "        cmpw", },
10278a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    { &test_cmplw           , "       cmplw", },
1028a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1029a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cmpd            , "        cmpd", },
1030a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cmpld           , "       cmpld", },
1031a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
10358a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionextern void test_cmpwi (void);
10368a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_cmpwi", "cmpwi         2, 14, 0");
10378a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion
10388a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionextern void test_cmplwi (void);
10398a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_cmplwi", "cmplwi        2, 14, 0");
1040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1041a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1042a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_cmpdi (void);
1043a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_cmpdi", "cmpdi        2, 14, 0");
1044a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1045a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_cmpldi (void);
1046a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_cmpldi", "cmpldi       2, 14, 0");
1047a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1048a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_icr_ops_two_i16[] = {
10508a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    { &test_cmpwi           , "       cmpwi", },
10518a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion    { &test_cmplwi          , "      cmplwi", },
1052a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1053a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cmpdi           , "       cmpdi", },
1054a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cmpldi          , "      cmpldi", },
1055a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
105957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addi (void);
10608a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addi", "addi         17, 14, 0");
106157778621b9d85c82fcb5185ba146add1715c5432sewardj
106257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addic (void);
10638a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addic", "addic        17, 14, 0");
106457778621b9d85c82fcb5185ba146add1715c5432sewardj
106557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addis (void);
10668a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addis", "addis        17, 14, 0");
106757778621b9d85c82fcb5185ba146add1715c5432sewardj
106857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mulli (void);
10698a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mulli", "mulli        17, 14, 0");
107057778621b9d85c82fcb5185ba146add1715c5432sewardj
107157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_subfic (void);
10728a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_subfic", "subfic       17, 14, 0");
1073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ia_ops_two_i16[] = {
1075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addi            , "        addi", },
1076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addic           , "       addic", },
1077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addis           , "       addis", },
1078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulli           , "       mulli", },
1079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfic          , "      subfic", },
1080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
108357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addic_ (void);
10848a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addic_", "addic.       17, 14, 0");
1085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iar_ops_two_i16[] = {
1087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addic_          , "      addic.", },
1088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
109157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_ori (void);
10928a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_ori", "ori       17, 14, 0");
109357778621b9d85c82fcb5185ba146add1715c5432sewardj
109457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_oris (void);
10958a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_oris", "oris       17, 14, 0");
109657778621b9d85c82fcb5185ba146add1715c5432sewardj
109757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_xori (void);
10988a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_xori", "xori       17, 14, 0");
109957778621b9d85c82fcb5185ba146add1715c5432sewardj
110057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_xoris (void);
11018a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_xoris", "xoris       17, 14, 0");
1102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_two_i16[] = {
1104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_ori             , "         ori", },
1105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_oris            , "        oris", },
1106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xori            , "        xori", },
1107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xoris           , "       xoris", },
1108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
111157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_andi_ (void);
11128a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_andi_", "andi.       17, 14, 0");
111357778621b9d85c82fcb5185ba146add1715c5432sewardj
111457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_andis_ (void);
11158a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_andis_", "andis.      17, 14, 0");
1116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_two_i16[] = {
1118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andi_           , "       andi.", },
1119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andis_          , "      andis.", },
1120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crand (void)
1124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crand        17, 14, 15");
1126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crandc (void)
1129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crandc       17, 14, 15");
1131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_creqv (void)
1134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("creqv        17, 14, 15");
1136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crnand (void)
1139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crnand       17, 14, 15");
1141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crnor (void)
1144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crnor        17, 14, 15");
1146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cror (void)
1149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cror         17, 14, 15");
1151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crorc (void)
1154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crorc        17, 14, 15");
1156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crxor (void)
1159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crxor        17, 14, 15");
1161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_crl_ops_two[] = {
1164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crand           , "       crand", },
1165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crandc          , "      crandc", },
1166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_creqv           , "       creqv", },
1167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crnand          , "      crnand", },
1168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crnor           , "       crnor", },
1169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cror            , "        cror", },
1170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crorc           , "       crorc", },
1171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crxor           , "       crxor", },
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_iac_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_addme_ (void)
1228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addme.       17, 14");
1230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addmeo_ (void)
1233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addmeo.      17, 14");
1235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addze_ (void)
1238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addze.       17, 14");
1240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addzeo_ (void)
1243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addzeo.      17, 14");
1245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfme_ (void)
1248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfme.      17, 14");
1250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfmeo_ (void)
1253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfmeo.     17, 14");
1255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfze_ (void)
1258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfze.      17, 14");
1260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfzeo_ (void)
1263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfzeo.     17, 14");
1265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iacr_ops_one[] = {
1268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addme_          , "      addme.", },
1269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addmeo_         , "     addmeo.", },
1270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addze_          , "      addze.", },
1271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addzeo_         , "     addzeo.", },
1272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfme_         , "     subfme.", },
1273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfmeo_        , "    subfmeo.", },
1274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfze_         , "     subfze.", },
1275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfzeo_        , "    subfzeo.", },
1276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cntlzw (void)
1280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cntlzw       17, 14");
1282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsb (void)
1285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsb        17, 14");
1287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsh (void)
1290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsh        17, 14");
1292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_neg (void)
1295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("neg          17, 14");
1297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nego (void)
1300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nego         17, 14");
1302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1304a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1305a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_cntlzd (void)
1306a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1307a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("cntlzd       17, 14");
1308a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1309a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1310a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_extsw (void)
1311a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1312a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("extsw        17, 14");
1313a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1314a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1315a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_one[] = {
1317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cntlzw          , "      cntlzw", },
1318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsb           , "       extsb", },
1319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsh           , "       extsh", },
1320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_neg             , "         neg", },
1321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nego            , "        nego", },
1322a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1323a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cntlzd          , "      cntlzd", },
1324a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_extsw           , "       extsw", },
1325a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cntlzw_ (void)
1330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cntlzw.      17, 14");
1332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsb_ (void)
1335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsb.       17, 14");
1337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsh_ (void)
1340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsh.       17, 14");
1342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_neg_ (void)
1345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("neg.         17, 14");
1347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nego_ (void)
1350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nego.        17, 14");
1352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1354a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1355a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_cntlzd_ (void)
1356a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1357a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("cntlzd.      17, 14");
1358a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1359a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1360a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_extsw_ (void)
1361a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1362a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("extsw.       17, 14");
1363a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1364a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1365a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_one[] = {
1367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cntlzw_         , "     cntlzw.", },
1368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsb_          , "      extsb.", },
1369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsh_          , "      extsh.", },
1370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_neg_            , "        neg.", },
1371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nego_           , "       nego.", },
1372a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1373a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_cntlzd_         , "     cntlzd.", },
1374a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_extsw_          , "      extsw.", },
1375a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
137957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwimi (void);
13808a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwimi", "rlwimi      17, 14, 0, 0, 0");
138157778621b9d85c82fcb5185ba146add1715c5432sewardj
138257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwinm (void);
13838a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwinm", "rlwinm      17, 14, 0, 0, 0");
138457778621b9d85c82fcb5185ba146add1715c5432sewardj
138557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwnm (void);
13868a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwnm", "rlwnm      17, 14, 15, 0, 0");
138757778621b9d85c82fcb5185ba146add1715c5432sewardj
138857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_srawi (void);
13898a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_srawi", "srawi      17, 14, 0");
1390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mfcr (void)
1392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mfcr         17");
1394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mfspr (void)
1397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mfspr        17, 1");
1399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mtspr (void)
1402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mtspr        1, 14");
1404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1406a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1407a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldcl (void);
1408a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldcl", "rldcl       17, 14, 15, 0");
1409a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1410a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldcr (void);
1411a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldcr", "rldcr       17, 14, 15, 0");
1412a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1413a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldic (void);
1414a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldic", "rldic       17, 14, 0, 0");
1415a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1416a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldicl (void);
1417a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldicl", "rldicl      17, 14, 0, 0");
1418a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1419a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldicr (void);
1420a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldicr", "rldicr      17, 14, 0, 0");
1421a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1422a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldimi (void);
1423a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldimi", "rldimi      17, 14, 0, 0");
1424a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1425a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_sradi (void);
1426a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_sradi", "sradi      17, 14, 0");
1427a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1428a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_spe[] = {
1430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwimi          , "      rlwimi", },
1431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwinm          , "      rlwinm", },
1432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwnm           , "       rlwnm", },
1433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srawi           , "       srawi", },
1434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mfcr            , "        mfcr", },
1435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mfspr           , "       mfspr", },
1436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mtspr           , "       mtspr", },
1437a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1438a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldcl           , "       rldcl", },
1439a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldcr           , "       rldcr", },
1440a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldic           , "       rldic", },
1441a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldicl          , "      rldicl", },
1442a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldicr          , "      rldicr", },
1443a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldimi          , "      rldimi", },
1444a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_sradi           , "       sradi", },
1445a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
144957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwimi_ (void);
14508a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwimi_", "rlwimi.      17, 14, 0, 0, 0");
145157778621b9d85c82fcb5185ba146add1715c5432sewardj
145257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwinm_ (void);
14538a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwinm_", "rlwinm.      17, 14, 0, 0, 0");
145457778621b9d85c82fcb5185ba146add1715c5432sewardj
145557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwnm_ (void);
14568a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwnm_", "rlwnm.      17, 14, 15, 0, 0");
145757778621b9d85c82fcb5185ba146add1715c5432sewardj
145857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_srawi_ (void);
14598a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_srawi_", "srawi.      17, 14, 0");
146057778621b9d85c82fcb5185ba146add1715c5432sewardj
146157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mcrf (void);
14628a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mcrf", "mcrf      0, 0");
146357778621b9d85c82fcb5185ba146add1715c5432sewardj
146457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mcrxr (void);
14658a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mcrxr", "mcrxr      0");
146657778621b9d85c82fcb5185ba146add1715c5432sewardj
146757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mtcrf (void);
14688a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mtcrf", "mtcrf      0, 14");
1469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1470a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1471a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldcl_ (void);
1472a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldcl_", "rldcl.      17, 14, 15, 0");
1473a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1474a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldcr_ (void);
1475a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldcr_", "rldcr.      17, 14, 15, 0");
1476a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1477a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldic_ (void);
1478a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldic_", "rldic.      17, 14, 0, 0");
1479a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1480a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldicl_ (void);
1481a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldicl_", "rldicl.     17, 14, 0, 0");
1482a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1483a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldicr_ (void);
1484a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldicr_", "rldicr.     17, 14, 0, 0");
1485a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1486a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_rldimi_ (void);
1487a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_rldimi_", "rldimi.     17, 14, 0, 0");
1488a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1489a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_sradi_ (void);
1490a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_sradi_", "sradi.      17, 14, 0");
1491a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1492a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_spe[] = {
1494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwimi_         , "     rlwimi.", },
1495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwinm_         , "     rlwinm.", },
1496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwnm_          , "      rlwnm.", },
1497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srawi_          , "      srawi.", },
1498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mcrf            , "        mcrf", },
1499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mcrxr           , "       mcrxr", },
1500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mtcrf           , "       mtcrf", },
1501a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1502a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldcl_          , "      rldcl.", },
1503a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldcr_          , "      rldcr.", },
1504a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldic_          , "      rldic.", },
1505a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldicl_         , "     rldicl.", },
1506a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldicr_         , "     rldicr.", },
1507a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_rldimi_         , "     rldimi.", },
1508a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_sradi_          , "      sradi.", },
1509a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
151357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lbz (void);
15148a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lbz", "lbz          17,0(14)");
151557778621b9d85c82fcb5185ba146add1715c5432sewardj
151657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lbzu (void);
15178a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lbzu", "lbzu          17,0(14)");
151857778621b9d85c82fcb5185ba146add1715c5432sewardj
151957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lha (void);
15208a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lha", "lha          17,0(14)");
152157778621b9d85c82fcb5185ba146add1715c5432sewardj
152257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lhau (void);
15238a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lhau", "lhau          17,0(14)");
152457778621b9d85c82fcb5185ba146add1715c5432sewardj
152557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lhz (void);
15268a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lhz", "lhz          17,0(14)");
152757778621b9d85c82fcb5185ba146add1715c5432sewardj
152857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lhzu (void);
15298a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lhzu", "lhzu         17,0(14)");
153057778621b9d85c82fcb5185ba146add1715c5432sewardj
153157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lwz (void);
15328a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lwz", "lwz          17,0(14)");
153357778621b9d85c82fcb5185ba146add1715c5432sewardj
153457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lwzu (void);
15358a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lwzu", "lwzu          17,0(14)");
1536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1537a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1538a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_ld (void);
1539a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_ld", "ld            17,0(14)");
1540a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1541a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_ldu (void);
1542a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_ldu", "ldu           17,0(14)");
1543a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1544a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_lwa (void);
1545a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_lwa", "lwa           17,0(14)");
1546a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1547a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ild_ops_two_i16[] = {
1549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbz             , "         lbz", },
1550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbzu            , "        lbzu", },
1551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lha             , "         lha", },
1552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhau            , "        lhau", },
1553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhz             , "         lhz", },
1554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhzu            , "        lhzu", },
1555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwz             , "         lwz", },
1556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwzu            , "        lwzu", },
1557a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1558a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_ld              , "          ld", },
1559a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_ldu             , "         ldu", },
1560a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_lwa             , "         lwa", },
1561a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzx (void)
1566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lbzx         17,14,15");
1568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzux (void)
1571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lbzux        17,14,15");
1573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhax (void)
1576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhax         17,14,15");
1578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhaux (void)
1581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhaux        17,14,15");
1583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzx (void)
1586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhzx         17,14,15");
1588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzux (void)
1591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhzux        17,14,15");
1593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzx (void)
1596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lwzx         17,14,15");
1598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzux (void)
1601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lwzux        17,14,15");
1603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1605a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1606a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_ldx (void)
1607a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1608a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("ldx         17,14,15");
1609a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1610a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1611a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_ldux (void)
1612a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1613a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("ldux        17,14,15");
1614a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1615a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1616a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_lwax (void)
1617a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1618a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("lwax        17,14,15");
1619a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1620a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1621a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_lwaux (void)
1622a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1623a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("lwaux        17,14,15");
1624a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1625a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1626a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ild_ops_two[] = {
1628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbzx            , "        lbzx", },
1629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbzux           , "       lbzux", },
1630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhax            , "        lhax", },
1631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhaux           , "       lhaux", },
1632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhzx            , "        lhzx", },
1633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhzux           , "       lhzux", },
1634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwzx            , "        lwzx", },
1635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwzux           , "       lwzux", },
1636a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1637a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_ldx             , "         ldx", },
1638a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_ldux            , "        ldux", },
1639a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_lwax            , "        lwax", },
1640a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_lwaux           , "       lwaux", },
1641a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
164557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stb (void);
16468a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stb", "stb          14,0(15)");
164757778621b9d85c82fcb5185ba146add1715c5432sewardj
164857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stbu (void);
16498a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stbu", "stbu          14,0(15)");
165057778621b9d85c82fcb5185ba146add1715c5432sewardj
165157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_sth (void);
16528a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_sth", "sth          14,0(15)");
165357778621b9d85c82fcb5185ba146add1715c5432sewardj
165457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_sthu (void);
16558a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_sthu", "sthu         14,0(15)");
165657778621b9d85c82fcb5185ba146add1715c5432sewardj
165757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stw (void);
16588a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stw", "stw          14,0(15)");
165957778621b9d85c82fcb5185ba146add1715c5432sewardj
166057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stwu (void);
16618a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stwu", "stwu          14,0(15)");
1662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1663a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1664a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_std (void);
1665a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_std", "std          14,0(15)");
1666a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1667a2a583876ee4197d0284960aeb594dc75bce2f09cerionextern void test_stdu (void);
1668a2a583876ee4197d0284960aeb594dc75bce2f09cerionASSEMBLY_FUNC("test_stdu", "stdu          14,0(15)");
1669a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1670a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ist_ops_three_i16[] = {
1672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stb             , "         stb", },
1673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stbu            , "        stbu", },
1674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sth             , "         sth", },
1675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sthu            , "        sthu", },
1676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stw             , "         stw", },
1677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stwu            , "        stwu", },
1678a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1679a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_std             , "         std", },
1680a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_stdu            , "        stdu", },
1681a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbx (void)
1686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stbx         14,15,16");
1688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbux (void)
1691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stbux        14,15,16");
1693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthx (void)
1696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sthx         14,15,16");
1698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthux (void)
1701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sthux        14,15,16");
1703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwx (void)
1706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stwx         14,15,16");
1708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwux (void)
1711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stwux        14,15,16");
1713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1715a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1716a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_stdx (void)
1717a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1718a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("stdx         14,15,16");
1719a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1720a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1721a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_stdux (void)
1722a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
1723a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("stdux        14,15,16");
1724a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
1725a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1726a2a583876ee4197d0284960aeb594dc75bce2f09cerion
1727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ist_ops_three[] = {
1728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stbx            , "        stbx", },
1729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stbux           , "       stbux", },
1730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sthx            , "        sthx", },
1731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sthux           , "       sthux", },
1732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stwx            , "        stwx", },
1733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stwux           , "       stwux", },
1734a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
1735a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_stdx            , "        stdx", },
1736a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_stdux           , "       stdux", },
1737a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
1738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1741a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippestatic void
1742a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippetests_popcnt_one(void)
1743a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe{
1744a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe   __asm__ __volatile__ ("popcntb      17, 14");
1745a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe}
1746a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe
1747a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippestatic test_t tests_popcnt_ops_one[] = {
1748a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe    { &tests_popcnt_one            , "        popcntb", },
1749a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe    { NULL,                   NULL,           },
1750a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe};
1751a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe
1752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsel (void)
1754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsel         17, 14, 15, 16");
1756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadd (void)
1759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadd        17, 14, 15, 16");
1761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadds (void)
1764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadds       17, 14, 15, 16");
1766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsub (void)
1769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsub        17, 14, 15, 16");
1771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsubs (void)
1774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsubs       17, 14, 15, 16");
1776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadd (void)
1779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadd       17, 14, 15, 16");
1781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadds (void)
1784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadds      17, 14, 15, 16");
1786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsub (void)
1789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsub       17, 14, 15, 16");
1791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsubs (void)
1794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsubs      17, 14, 15, 16");
1796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_three[] = {
1799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsel            , "        fsel", },
1800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadd           , "       fmadd", },
1801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadds          , "      fmadds", },
1802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsub           , "       fmsub", },
1803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsubs          , "      fmsubs", },
1804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadd          , "      fnmadd", },
1805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadds         , "     fnmadds", },
1806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsub          , "      fnmsub", },
1807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsubs         , "     fnmsubs", },
1808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsel_ (void)
1814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsel.        17, 14, 15, 16");
1816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadd_ (void)
1819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadd.       17, 14, 15, 16");
1821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadds_ (void)
1824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadds.      17, 14, 15, 16");
1826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsub_ (void)
1829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsub.       17, 14, 15, 16");
1831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsubs_ (void)
1834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsubs.      17, 14, 15, 16");
1836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadd_ (void)
1839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadd.      17, 14, 15, 16");
1841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadds_ (void)
1844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadds.     17, 14, 15, 16");
1846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsub_ (void)
1849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsub.      17, 14, 15, 16");
1851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsubs_ (void)
1854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsubs.     17, 14, 15, 16");
1856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_three[] = {
1859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsel_           , "       fsel.", },
1860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadd_          , "      fmadd.", },
1861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadds_         , "     fmadds.", },
1862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsub_          , "      fmsub.", },
1863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsubs_         , "     fmsubs.", },
1864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadd_         , "     fnmadd.", },
1865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadds_        , "    fnmadds.", },
1866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsub_         , "     fnmsub.", },
1867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsubs_        , "    fnmsubs.", },
1868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadd (void)
1874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadd         17, 14, 15");
1876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadds (void)
1879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadds        17, 14, 15");
1881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsub (void)
1884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsub         17, 14, 15");
1886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsubs (void)
1889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsubs        17, 14, 15");
1891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmul (void)
1894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmul         17, 14, 15");
1896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmuls (void)
1899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmuls        17, 14, 15");
1901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdiv (void)
1904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdiv         17, 14, 15");
1906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdivs (void)
1909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdivs        17, 14, 15");
1911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_two[] = {
1914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadd            , "        fadd", },
1915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadds           , "       fadds", },
1916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsub            , "        fsub", },
1917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsubs           , "       fsubs", },
1918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmul            , "        fmul", },
1919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmuls           , "       fmuls", },
1920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdiv            , "        fdiv", },
1921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdivs           , "       fdivs", },
1922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadd_ (void)
1928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadd.        17, 14, 15");
1930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadds_ (void)
1933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadds.       17, 14, 15");
1935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsub_ (void)
1938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsub.        17, 14, 15");
1940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsubs_ (void)
1943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsubs.       17, 14, 15");
1945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmul_ (void)
1948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmul.        17, 14, 15");
1950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmuls_ (void)
1953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmuls.       17, 14, 15");
1955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdiv_ (void)
1958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdiv.        17, 14, 15");
1960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdivs_ (void)
1963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdivs.       17, 14, 15");
1965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_two[] = {
1968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadd_           , "       fadd.", },
1969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadds_          , "      fadds.", },
1970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsub_           , "       fsub.", },
1971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsubs_          , "      fsubs.", },
1972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmul_           , "       fmul.", },
1973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmuls_          , "      fmuls.", },
1974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdiv_           , "       fdiv.", },
1975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdivs_          , "      fdivs.", },
1976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fcmpo (void)
1982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fcmpo        2, 14, 15");
1984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fcmpu (void)
1987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fcmpu        2, 14, 15");
1989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fcr_ops_two[] = {
1992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fcmpo           , "       fcmpo", },
1993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fcmpu           , "       fcmpu", },
1994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
199905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
2000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fres (void)
2001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fres         17, 14");
2003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsqrte (void)
2006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("frsqrte      17, 14");
2008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsp (void)
2011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("frsp         17, 14");
2013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiw (void)
2016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiw        17, 14");
2018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiwz (void)
2021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiwz       17, 14");
2023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmr (void)
2026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmr          17, 14");
2028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fneg (void)
2031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fneg         17, 14");
2033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fabs (void)
2036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fabs         17, 14");
2038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnabs (void)
2041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnabs        17, 14");
2043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2045586fb038935723146cb6950b38911aeb9fc12765cerionstatic void test_fsqrt (void)
2046586fb038935723146cb6950b38911aeb9fc12765cerion{
2047586fb038935723146cb6950b38911aeb9fc12765cerion    __asm__ __volatile__ ("fsqrt        17, 14");
2048586fb038935723146cb6950b38911aeb9fc12765cerion}
2049586fb038935723146cb6950b38911aeb9fc12765cerion
2050a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
2051a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fcfid (void)
2052a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
2053a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fcfid        17, 14");
2054a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
2055a2a583876ee4197d0284960aeb594dc75bce2f09cerion
2056a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fctid (void)
2057a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
2058a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fctid        17, 14");
2059a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
2060a2a583876ee4197d0284960aeb594dc75bce2f09cerion
2061a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fctidz (void)
2062a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
2063a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fctidz       17, 14");
2064a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
2065a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
2066a2a583876ee4197d0284960aeb594dc75bce2f09cerion
2067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_one[] = {
206863b52cfe3df319eac28ad8c8b40adde62079e07fsewardj    { &test_fres            , "        fres", },
206963b52cfe3df319eac28ad8c8b40adde62079e07fsewardj    { &test_frsqrte         , "     frsqrte", },
2070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_frsp            , "        frsp", },
2071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiw           , "       fctiw", },
2072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiwz          , "      fctiwz", },
2073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmr             , "         fmr", },
2074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fneg            , "        fneg", },
2075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fabs            , "        fabs", },
2076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnabs           , "       fnabs", },
2077586fb038935723146cb6950b38911aeb9fc12765cerion    { &test_fsqrt           , "       fsqrt", },
2078a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
2079a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fcfid           , "       fcfid", },
2080a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fctid           , "       fctid", },
2081a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fctidz          , "      fctidz", },
2082a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
2083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
2086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
208805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
2089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fres_ (void)
2090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fres.        17, 14");
2092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsqrte_ (void)
2095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
209632b4a4264d671d072f57190fe88262ae698f6fa3philippe     __asm__ __volatile__ ("frsqrte.     17, 14");
2097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsp_ (void)
2100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("frsp.        17, 14");
2102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiw_ (void)
2105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiw.       17, 14");
2107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiwz_ (void)
2110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiwz.      17, 14");
2112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmr_ (void)
2115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmr.         17, 14");
2117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fneg_ (void)
2120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fneg.        17, 14");
2122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fabs_ (void)
2125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fabs.        17, 14");
2127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnabs_ (void)
2130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnabs.       17, 14");
2132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2134a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
2135a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fcfid_ (void)
2136a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
2137a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fcfid.       17, 14");
2138a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
2139a2a583876ee4197d0284960aeb594dc75bce2f09cerion
2140a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fctid_ (void)
2141a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
2142a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fctid.       17, 14");
2143a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
2144a2a583876ee4197d0284960aeb594dc75bce2f09cerion
2145a2a583876ee4197d0284960aeb594dc75bce2f09cerionstatic void test_fctidz_ (void)
2146a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
2147a2a583876ee4197d0284960aeb594dc75bce2f09cerion    __asm__ __volatile__ ("fctidz.      17, 14");
2148a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
2149a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
2150a2a583876ee4197d0284960aeb594dc75bce2f09cerion
2151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_one[] = {
215263b52cfe3df319eac28ad8c8b40adde62079e07fsewardj    { &test_fres_           , "       fres.", },
215363b52cfe3df319eac28ad8c8b40adde62079e07fsewardj    { &test_frsqrte_        , "    frsqrte.", },
2154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_frsp_           , "       frsp.", },
2155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiw_          , "      fctiw.", },
2156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiwz_         , "     fctiwz.", },
2157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmr_            , "        fmr.", },
2158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fneg_           , "       fneg.", },
2159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fabs_           , "       fabs.", },
2160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnabs_          , "      fnabs.", },
2161a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
2162a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fcfid_          , "      fcfid.", },
2163a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fctid_          , "      fctid.", },
2164a2a583876ee4197d0284960aeb594dc75bce2f09cerion    { &test_fctidz_         , "     fctidz.", },
2165a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
2166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
2169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
2171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fl_ops_spe[] = {
2172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
2175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
2177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_flr_ops_spe[] = {
2178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
2181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2182c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2183c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
2184c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfs (void);
21858a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfs", "lfs          17,0(14)");
2186c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2187c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfsu (void);
21888a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfsu", "lfsu          17,0(14)");
2189c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2190c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfd (void);
21918a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfd", "lfd          17,0(14)");
2192c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2193c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfdu (void);
21948a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfdu", "lfdu          17,0(14)");
2195c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2196c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fld_ops_two_i16[] = {
2197c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfs             , "         lfs", },
2198c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfsu            , "        lfsu", },
2199c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfd             , "         lfd", },
2200c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfdu            , "        lfdu", },
2201c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { NULL,                   NULL,           },
2202c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion};
2203c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
2204c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2205c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
2206c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfsx (void)
2207c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2208c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("lfsx         17,14,15");
2209c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2210c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2211c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfsux (void)
2212c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2213c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("lfsux        17,14,15");
2214c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2215c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2216c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfdx (void)
2217c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2218c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("lfdx         17,14,15");
2219c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2220c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2221c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfdux (void)
2222c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2223c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("lfdux        17,14,15");
2224c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2225c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2226c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fld_ops_two[] = {
2227c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfsx            , "        lfsx", },
2228c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfsux           , "       lfsux", },
2229c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfdx            , "        lfdx", },
2230c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_lfdux           , "       lfdux", },
2231c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { NULL,                   NULL,           },
2232c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion};
2233c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
2234c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2235c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
2236c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfs (void);
22378a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfs", "stfs          14,0(15)");
2238c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2239c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfsu (void);
22408a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfsu", "stfsu          14,0(15)");
2241c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2242c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfd (void);
22438a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfd", "stfd          14,0(15)");
2244c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2245c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfdu (void);
22468a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfdu", "stfdu         14,0(15)");
2247c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2248c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fst_ops_three_i16[] = {
2249586fb038935723146cb6950b38911aeb9fc12765cerion    { &test_stfs             , "         stfs", },
2250586fb038935723146cb6950b38911aeb9fc12765cerion    { &test_stfsu            , "        stfsu", },
2251c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_stfd             , "         stfd", },
2252c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_stfdu            , "        stfdu", },
2253c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { NULL,                   NULL,           },
2254c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion};
2255c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
2256c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2257c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
2258c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfsx (void)
2259c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2260c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("stfsx         14,15,16");
2261c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2262c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2263c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfsux (void)
2264c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2265c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("stfsux        14,15,16");
2266c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2267c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2268c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfdx (void)
2269c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2270c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("stfdx         14,15,16");
2271c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2272c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2273c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfdux (void)
2274c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
2275c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    __asm__ __volatile__ ("stfdux        14,15,16");
2276c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
2277c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2278c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fst_ops_three[] = {
2279586fb038935723146cb6950b38911aeb9fc12765cerion    { &test_stfsx            , "        stfsx", },
2280586fb038935723146cb6950b38911aeb9fc12765cerion    { &test_stfsux           , "       stfsux", },
2281c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_stfdx            , "        stfdx", },
2282c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { &test_stfdux           , "       stfdux", },
2283c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    { NULL,                   NULL,           },
2284c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion};
2285c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
2286c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2287c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
2288f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmhaddshs (void)
2290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmhaddshs    17, 14, 15, 16");
2292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmhraddshs (void)
2295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmhraddshs   17, 14, 15, 16");
2297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmladduhm (void)
2300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmladduhm    17, 14, 15, 16");
2302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumubm (void)
2305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumubm     17, 14, 15, 16");
2307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumuhm (void)
2310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumuhm     17, 14, 15, 16");
2312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumshs (void)
2315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumshs     17, 14, 15, 16");
2317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumuhs (void)
2320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumuhs     17, 14, 15, 16");
2322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsummbm (void)
2325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsummbm     17, 14, 15, 16");
2327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumshm (void)
2330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumshm     17, 14, 15, 16");
2332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_aa_ops_three[] = {
2335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmhaddshs       , "   vmhaddshs", },
2336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmhraddshs      , "  vmhraddshs", },
2337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmladduhm       , "   vmladduhm", },
2338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumubm        , "    vmsumubm", },
2339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumuhm        , "    vmsumuhm", },
2340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumshs        , "    vmsumshs", },
2341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumuhs        , "    vmsumuhs", },
2342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsummbm        , "    vmsummbm", },
2343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumshm        , "    vmsumshm", },
2344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2346f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2348f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vperm (void)
2350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vperm        17, 14, 15, 16");
2352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsel (void)
2355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsel         17, 14, 15, 16");
2357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_three[] = {
2360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vperm           , "       vperm", },
2361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsel            , "        vsel", },
2362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2364f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2366f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddubm (void)
2368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddubm      17, 14, 15");
2370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduhm (void)
2373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduhm      17, 14, 15");
2375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduwm (void)
2378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduwm      17, 14, 15");
2380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddubs (void)
2383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddubs      17, 14, 15");
2385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduhs (void)
2388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduhs      17, 14, 15");
2390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduws (void)
2393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduws      17, 14, 15");
2395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddsbs (void)
2398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddsbs      17, 14, 15");
2400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddshs (void)
2403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddshs      17, 14, 15");
2405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddsws (void)
2408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddsws      17, 14, 15");
2410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddcuw (void)
2413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddcuw      17, 14, 15");
2415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsububm (void)
2418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsububm      17, 14, 15");
2420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuhm (void)
2423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuhm      17, 14, 15");
2425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuwm (void)
2428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuwm      17, 14, 15");
2430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsububs (void)
2433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsububs      17, 14, 15");
2435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuhs (void)
2438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuhs      17, 14, 15");
2440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuws (void)
2443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuws      17, 14, 15");
2445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubsbs (void)
2448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubsbs      17, 14, 15");
2450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubshs (void)
2453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubshs      17, 14, 15");
2455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubsws (void)
2458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubsws      17, 14, 15");
2460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubcuw (void)
2463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubcuw      17, 14, 15");
2465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuloub (void)
2468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmuloub      17, 14, 15");
2470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulouh (void)
2473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulouh      17, 14, 15");
2475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulosb (void)
2478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulosb      17, 14, 15");
2480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulosh (void)
2483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulosh      17, 14, 15");
2485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuleub (void)
2488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmuleub      17, 14, 15");
2490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuleuh (void)
2493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmuleuh      17, 14, 15");
2495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulesb (void)
2498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulesb      17, 14, 15");
2500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulesh (void)
2503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulesh      17, 14, 15");
2505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsumsws (void)
2508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsumsws      17, 14, 15");
2510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum2sws (void)
2513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum2sws     17, 14, 15");
2515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4ubs (void)
2518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum4ubs     17, 14, 15");
2520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4sbs (void)
2523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum4sbs     17, 14, 15");
2525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4shs (void)
2528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum4shs     17, 14, 15");
2530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgub (void)
2533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgub       17, 14, 15");
2535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavguh (void)
2538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavguh       17, 14, 15");
2540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavguw (void)
2543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavguw       17, 14, 15");
2545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsb (void)
2548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgsb       17, 14, 15");
2550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsh (void)
2553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgsh       17, 14, 15");
2555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsw (void)
2558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgsw       17, 14, 15");
2560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxub (void)
2563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxub       17, 14, 15");
2565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxuh (void)
2568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxuh       17, 14, 15");
2570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxuw (void)
2573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxuw       17, 14, 15");
2575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsb (void)
2578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxsb       17, 14, 15");
2580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsh (void)
2583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxsh       17, 14, 15");
2585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsw (void)
2588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxsw       17, 14, 15");
2590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminub (void)
2593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminub       17, 14, 15");
2595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminuh (void)
2598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminuh       17, 14, 15");
2600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminuw (void)
2603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminuw       17, 14, 15");
2605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsb (void)
2608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminsb       17, 14, 15");
2610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsh (void)
2613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminsh       17, 14, 15");
2615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsw (void)
2618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminsw       17, 14, 15");
2620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_aa_ops_two[] = {
2623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddubm         , "     vaddubm", },
2624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduhm         , "     vadduhm", },
2625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduwm         , "     vadduwm", },
2626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddubs         , "     vaddubs", },
2627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduhs         , "     vadduhs", },
2628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduws         , "     vadduws", },
2629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddsbs         , "     vaddsbs", },
2630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddshs         , "     vaddshs", },
2631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddsws         , "     vaddsws", },
2632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddcuw         , "     vaddcuw", },
2633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsububm         , "     vsububm", },
2634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuhm         , "     vsubuhm", },
2635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuwm         , "     vsubuwm", },
2636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsububs         , "     vsububs", },
2637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuhs         , "     vsubuhs", },
2638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuws         , "     vsubuws", },
2639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubsbs         , "     vsubsbs", },
2640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubshs         , "     vsubshs", },
2641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubsws         , "     vsubsws", },
2642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubcuw         , "     vsubcuw", },
2643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmuloub         , "     vmuloub", },
2644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulouh         , "     vmulouh", },
2645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulosb         , "     vmulosb", },
2646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulosh         , "     vmulosh", },
2647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmuleub         , "     vmuleub", },
2648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmuleuh         , "     vmuleuh", },
2649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulesb         , "     vmulesb", },
2650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulesh         , "     vmulesh", },
2651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsumsws         , "     vsumsws", },
2652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum2sws        , "    vsum2sws", },
2653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum4ubs        , "    vsum4ubs", },
2654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum4sbs        , "    vsum4sbs", },
2655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum4shs        , "    vsum4shs", },
2656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgub          , "      vavgub", },
2657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavguh          , "      vavguh", },
2658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavguw          , "      vavguw", },
2659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgsb          , "      vavgsb", },
2660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgsh          , "      vavgsh", },
2661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgsw          , "      vavgsw", },
2662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxub          , "      vmaxub", },
2663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxuh          , "      vmaxuh", },
2664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxuw          , "      vmaxuw", },
2665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxsb          , "      vmaxsb", },
2666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxsh          , "      vmaxsh", },
2667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxsw          , "      vmaxsw", },
2668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminub          , "      vminub", },
2669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminuh          , "      vminuh", },
2670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminuw          , "      vminuw", },
2671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminsb          , "      vminsb", },
2672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminsh          , "      vminsh", },
2673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminsw          , "      vminsw", },
2674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2676f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2678f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vand (void)
2680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vand         17, 14, 15");
2682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vor (void)
2685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vor          17, 14, 15");
2687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vxor (void)
2690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vxor         17, 14, 15");
2692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vandc (void)
2695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vandc        17, 14, 15");
2697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vnor (void)
2700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vnor         17, 14, 15");
2702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlb (void)
2705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrlb         17, 14, 15");
2707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlh (void)
2710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrlh         17, 14, 15");
2712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlw (void)
2715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrlw         17, 14, 15");
2717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslb (void)
2720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslb         17, 14, 15");
2722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslh (void)
2725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslh         17, 14, 15");
2727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslw (void)
2730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslw         17, 14, 15");
2732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrb (void)
2735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrb         17, 14, 15");
2737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrh (void)
2740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrh         17, 14, 15");
2742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrw (void)
2745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrw         17, 14, 15");
2747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrab (void)
2750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrab        17, 14, 15");
2752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrah (void)
2755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrah        17, 14, 15");
2757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsraw (void)
2760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsraw        17, 14, 15");
2762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuhum (void)
2765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuhum      17, 14, 15");
2767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuwum (void)
2770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuwum      17, 14, 15");
2772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuhus (void)
2775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuhus      17, 14, 15");
2777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuwus (void)
2780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuwus      17, 14, 15");
2782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkshus (void)
2785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkshus      17, 14, 15");
2787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkswus (void)
2790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkswus      17, 14, 15");
2792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkshss (void)
2795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkshss      17, 14, 15");
2797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkswss (void)
2800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkswss      17, 14, 15");
2802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkpx (void)
2805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkpx        17, 14, 15");
2807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghb (void)
2810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrghb       17, 14, 15");
2812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghh (void)
2815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrghh       17, 14, 15");
2817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghw (void)
2820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrghw       17, 14, 15");
2822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglb (void)
2825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrglb       17, 14, 15");
2827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglh (void)
2830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrglh       17, 14, 15");
2832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglw (void)
2835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrglw       17, 14, 15");
2837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslo (void)
2840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslo         17, 14, 15");
2842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsro (void)
2845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsro         17, 14, 15");
2847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_two[] = {
2850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vand            , "        vand", },
2851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vor             , "         vor", },
2852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vxor            , "        vxor", },
2853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vandc           , "       vandc", },
2854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vnor            , "        vnor", },
2855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrlb            , "        vrlb", },
2856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrlh            , "        vrlh", },
2857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrlw            , "        vrlw", },
2858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslb            , "        vslb", },
2859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslh            , "        vslh", },
2860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslw            , "        vslw", },
2861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrb            , "        vsrb", },
2862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrh            , "        vsrh", },
2863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrw            , "        vsrw", },
2864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrab           , "       vsrab", },
2865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrah           , "       vsrah", },
2866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsraw           , "       vsraw", },
2867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuhum         , "     vpkuhum", },
2868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuwum         , "     vpkuwum", },
2869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuhus         , "     vpkuhus", },
2870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuwus         , "     vpkuwus", },
2871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkshus         , "     vpkshus", },
2872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkswus         , "     vpkswus", },
2873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkshss         , "     vpkshss", },
2874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkswss         , "     vpkswss", },
2875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkpx           , "       vpkpx", },
2876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrghb          , "      vmrghb", },
2877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrghh          , "      vmrghh", },
2878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrghw          , "      vmrghw", },
2879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrglb          , "      vmrglb", },
2880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrglh          , "      vmrglh", },
2881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrglw          , "      vmrglw", },
2882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslo            , "        vslo", },
2883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsro            , "        vsro", },
2884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2886f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2888f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhsb (void)
2890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupkhsb      17, 14");
2892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhsh (void)
2895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupkhsh      17, 14");
2897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhpx (void)
2900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupkhpx      17, 14");
2902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklsb (void)
2905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupklsb      17, 14");
2907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklsh (void)
2910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupklsh      17, 14");
2912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklpx (void)
2915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupklpx      17, 14");
2917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_one[] = {
2920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupkhsb         , "     vupkhsb", },
2921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupkhsh         , "     vupkhsh", },
2922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupkhpx         , "     vupkhpx", },
2923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupklsb         , "     vupklsb", },
2924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupklsh         , "     vupklsh", },
2925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupklpx         , "     vupklpx", },
2926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2928f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2930f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtub (void)
2932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtub     17, 14, 15");
2934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuh (void)
2937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuh     17, 14, 15");
2939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuw (void)
2942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuw     17, 14, 15");
2944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsb (void)
2947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsb     17, 14, 15");
2949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsh (void)
2952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsh     17, 14, 15");
2954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsw (void)
2957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsw     17, 14, 15");
2959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequb (void)
2962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequb     17, 14, 15");
2964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequh (void)
2967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequh     17, 14, 15");
2969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequw (void)
2972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequw     17, 14, 15");
2974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ac_ops_two[] = {
2977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtub        , "    vcmpgtub", },
2978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuh        , "    vcmpgtuh", },
2979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuw        , "    vcmpgtuw", },
2980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsb        , "    vcmpgtsb", },
2981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsh        , "    vcmpgtsh", },
2982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsw        , "    vcmpgtsw", },
2983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequb        , "    vcmpequb", },
2984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequh        , "    vcmpequh", },
2985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequw        , "    vcmpequw", },
2986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2988f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
2989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2990f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
2991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtub_ (void)
2992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtub.    17, 14, 15");
2994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuh_ (void)
2997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuh.    17, 14, 15");
2999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuw_ (void)
3002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuw.    17, 14, 15");
3004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsb_ (void)
3007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsb.    17, 14, 15");
3009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsh_ (void)
3012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsh.    17, 14, 15");
3014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsw_ (void)
3017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsw.    17, 14, 15");
3019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequb_ (void)
3022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequb.    17, 14, 15");
3024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequh_ (void)
3027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequh.    17, 14, 15");
3029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequw_ (void)
3032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequw.    17, 14, 15");
3034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_acr_ops_two[] = {
3037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtub_       , "   vcmpgtub.", },
3038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuh_       , "   vcmpgtuh.", },
3039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuw_       , "   vcmpgtuw.", },
3040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsb_       , "   vcmpgtsb.", },
3041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsh_       , "   vcmpgtsh.", },
3042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsw_       , "   vcmpgtsw.", },
3043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequb_       , "   vcmpequb.", },
3044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequh_       , "   vcmpequh.", },
3045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequw_       , "   vcmpequw.", },
3046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3048f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3050f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
3051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsl (void)
3052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsl          17, 14, 15");
3054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsr (void)
3057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsr          17, 14, 15");
3059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
306157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltb (void);
30628a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltb", "vspltb       17, 14, 0");
306357778621b9d85c82fcb5185ba146add1715c5432sewardj
306457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vsplth (void);
30658a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vsplth", "vsplth       17, 14, 0");
306657778621b9d85c82fcb5185ba146add1715c5432sewardj
306757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltw (void);
30688a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltw", "vspltw       17, 14, 0");
306957778621b9d85c82fcb5185ba146add1715c5432sewardj
307057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltisb (void);
30718a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltisb", "vspltisb       17, 0");
307257778621b9d85c82fcb5185ba146add1715c5432sewardj
307357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltish (void);
30748a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltish", "vspltish       17, 0");
307557778621b9d85c82fcb5185ba146add1715c5432sewardj
307657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltisw (void);
30778a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltisw", "vspltisw       17, 0");
307857778621b9d85c82fcb5185ba146add1715c5432sewardj
307957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vsldoi (void);
30808a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vsldoi", "vsldoi       17, 14, 15, 0");
3081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
308205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvsl (void)
308305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
308405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvsl         17, 14, 15");
308505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
308605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
308705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvsr (void)
308805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
308905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvsr         17, 14, 15");
309005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
309105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
3092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_av_int_ops_spe[] = {
3093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsl             , "         vsl", },
3094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsr             , "         vsr", },
3095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltb          , "      vspltb", },
3096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsplth          , "      vsplth", },
3097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltw          , "      vspltw", },
3098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltisb        , "    vspltisb", },
3099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltish        , "    vspltish", },
3100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltisw        , "    vspltisw", },
3101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsldoi          , "      vsldoi", },
310205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvsl            , "        lvsl", },
310305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvsr            , "        lvsr", },
3104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3106f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3108f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
310905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvebx (void)
311005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
311105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvebx        17,14,15");
311205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
311305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
311405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvehx (void)
311505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
311605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvehx        17,14,15");
311705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
311805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
311905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvewx (void)
312005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
312105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvewx        17,14,15");
312205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
312305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
312405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvx (void)
312505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
312605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvx          17,14,15");
312705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
312805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
31290b21412e4daca69e48895a713111fe906133cd53sewardjstatic void test_lvxl (void)
31300b21412e4daca69e48895a713111fe906133cd53sewardj{
31310b21412e4daca69e48895a713111fe906133cd53sewardj    __asm__ __volatile__ ("lvxl         17,14,15");
31320b21412e4daca69e48895a713111fe906133cd53sewardj}
31330b21412e4daca69e48895a713111fe906133cd53sewardj
313405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic test_t tests_ald_ops_two[] = {
313505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvebx           , "       lvebx", },
313605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvehx           , "       lvehx", },
313705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvewx           , "       lvewx", },
313805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvx             , "         lvx", },
31390b21412e4daca69e48895a713111fe906133cd53sewardj    { &test_lvxl            , "        lvxl", },
314005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { NULL,                   NULL,           },
314105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion};
3142f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
314305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
3144f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
314505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvebx (void)
314605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
314705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvebx       14,15,16");
314805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
314905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
315005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvehx (void)
315105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
315205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvehx       14,15,16");
315305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
315405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
315505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvewx (void)
315605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
315705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvewx       14,15,16");
315805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
315905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
316005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvx (void)
316105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
316205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvx         14,15,16");
316305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
316405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
31650b21412e4daca69e48895a713111fe906133cd53sewardjstatic void test_stvxl (void)
31660b21412e4daca69e48895a713111fe906133cd53sewardj{
31670b21412e4daca69e48895a713111fe906133cd53sewardj    __asm__ __volatile__ ("stvxl        14,15,16");
31680b21412e4daca69e48895a713111fe906133cd53sewardj}
31690b21412e4daca69e48895a713111fe906133cd53sewardj
317005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic test_t tests_ast_ops_three[] = {
317105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvebx          , "      stvebx", },
317205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvehx          , "      stvehx", },
317305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvewx          , "      stvewx", },
317405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvx            , "        stvx", },
31750b21412e4daca69e48895a713111fe906133cd53sewardj    { &test_stvxl           , "       stvxl", },
317605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { NULL,                   NULL,           },
317705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion};
3178f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
317905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
3180f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
3181b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe#if 1
3182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaddfp (void)
3183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaddfp      17, 14, 15, 16");
3185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vnmsubfp (void)
3188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vnmsubfp     17, 14, 15, 16");
3190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
319105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
3192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_three[] = {
3194b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe    { &test_vmaddfp         , "     vmaddfp", },
3195b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe    { &test_vnmsubfp        , "    vnmsubfp", },
3196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3198f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3200f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
3201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddfp (void)
3202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddfp       17, 14, 15");
3204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubfp (void)
3207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubfp       17, 14, 15");
3209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxfp (void)
3212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxfp       17, 14, 15");
3214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminfp (void)
3217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminfp       17, 14, 15");
3219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_two[] = {
3222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddfp          , "      vaddfp", },
3223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubfp          , "      vsubfp", },
3224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxfp          , "      vmaxfp", },
3225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminfp          , "      vminfp", },
3226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3228f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3230f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
3231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfin (void)
3232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfin        17, 14");
3234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfiz (void)
3237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfiz        17, 14");
3239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfip (void)
3242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfip        17, 14");
3244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfim (void)
3247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfim        17, 14");
3249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrefp (void)
3252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrefp        17, 14");
3254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrsqrtefp (void)
3257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrsqrtefp    17, 14");
3259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
326105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0   // TODO: Not yet supported
3262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vlogefp (void)
3263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vlogefp      17, 14");
3265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vexptefp (void)
3268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vexptefp     17, 14");
3270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
327105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
3272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_one[] = {
32748f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vrfin           , "       vrfin", },
32758f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vrfiz           , "       vrfiz", },
32768f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vrfip           , "       vrfip", },
32778f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vrfim           , "       vrfim", },
3278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrefp           , "       vrefp", },
3279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrsqrtefp       , "   vrsqrtefp", },
3280b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion    //    { &test_vlogefp         , "     vlogefp", },   // TODO: Not yet supported
3281b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion    //    { &test_vexptefp        , "    vexptefp", },   // TODO: Not yet supported
3282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3284f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3286f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
3287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtfp (void)
3288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtfp     17, 14, 15");
3290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpeqfp (void)
3293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpeqfp     17, 14, 15");
3295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgefp (void)
3298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgefp     17, 14, 15");
3300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpbfp (void)
3303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpbfp      17, 14, 15");
3305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afc_ops_two[] = {
3308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtfp        , "    vcmpgtfp", },
3309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpeqfp        , "    vcmpeqfp", },
3310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgefp        , "    vcmpgefp", },
3311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpbfp         , "     vcmpbfp", },
3312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3314f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3316f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
3317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtfp_ (void)
3318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtfp.    17, 14, 15");
3320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpeqfp_ (void)
3323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpeqfp.    17, 14, 15");
3325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgefp_ (void)
3328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgefp.    17, 14, 15");
3330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpbfp_ (void)
3333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpbfp.     17, 14, 15");
3335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afcr_ops_two[] = {
3338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtfp_       , "   vcmpgtfp.", },
3339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpeqfp_       , "   vcmpeqfp.", },
3340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgefp_       , "   vcmpgefp.", },
3341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpbfp_        , "    vcmpbfp.", },
3342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3344f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
3345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3346f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
334757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vcfux (void);
33488a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vcfux", "vcfux        17, 14, 0");
334957778621b9d85c82fcb5185ba146add1715c5432sewardj
335057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vcfsx (void);
33518a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vcfsx", "vcfsx        17, 14, 0");
335257778621b9d85c82fcb5185ba146add1715c5432sewardj
335357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vctuxs (void);
33548a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vctuxs", "vctuxs        17, 14, 0");
335557778621b9d85c82fcb5185ba146add1715c5432sewardj
335657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vctsxs (void);
33578a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vctsxs", "vctsxs        17, 14, 0");
33588f5fc19da719edcd8dfca920837bde7ce1d3accacerion
33598f5fc19da719edcd8dfca920837bde7ce1d3accacerionstatic test_t tests_av_float_ops_spe[] = {
33608f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vcfux           , "       vcfux", },
33618f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vcfsx           , "       vcfsx", },
33628f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vctuxs          , "      vctuxs", },
33638f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { &test_vctsxs          , "      vctsxs", },
33648f5fc19da719edcd8dfca920837bde7ce1d3accacerion    { NULL,                   NULL,           },
33658f5fc19da719edcd8dfca920837bde7ce1d3accacerion};
3366f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
33678f5fc19da719edcd8dfca920837bde7ce1d3accacerion
3368074637e5b8af220614f9727bccc177e482b7ddc5carll/* Power ISA 2.03 support dcbtct and dcbtstct with valid hint values b00000 - 0b00111.
3369074637e5b8af220614f9727bccc177e482b7ddc5carll * The ISA 2.06 added support for more valid hint values, but rather than tie ourselves
3370074637e5b8af220614f9727bccc177e482b7ddc5carll * in knots trying to test all permuations of ISAs and valid hint values, we'll just
3371074637e5b8af220614f9727bccc177e482b7ddc5carll * verify some of the base hint values from ISA 2.03.
3372074637e5b8af220614f9727bccc177e482b7ddc5carll *
3373074637e5b8af220614f9727bccc177e482b7ddc5carll * In a similar vein, in ISA 2.03, dcbtds had valid values of 0b01000 - 0b01010, whereas
3374074637e5b8af220614f9727bccc177e482b7ddc5carll * ISA 2.06 expanded the range of valid hint values to 0b01000 - 0b01111.  We just test
3375074637e5b8af220614f9727bccc177e482b7ddc5carll * one of the ISA 2.03-supported values for dcbtds.
3376074637e5b8af220614f9727bccc177e482b7ddc5carll */
3377074637e5b8af220614f9727bccc177e482b7ddc5carllstatic void test_dcbtct (void)
3378074637e5b8af220614f9727bccc177e482b7ddc5carll{
3379f13107a45926fa51c6eed7141192597077003d06carll   /*  dcbt RA, RB, TH */
3380f13107a45926fa51c6eed7141192597077003d06carll   ASM_DCBT(17, 14, 1);
3381f13107a45926fa51c6eed7141192597077003d06carll   ASM_DCBT(17, 14, 7);
3382074637e5b8af220614f9727bccc177e482b7ddc5carll}
3383074637e5b8af220614f9727bccc177e482b7ddc5carll
3384074637e5b8af220614f9727bccc177e482b7ddc5carllstatic void test_dcbtds (void)
3385074637e5b8af220614f9727bccc177e482b7ddc5carll{
3386f13107a45926fa51c6eed7141192597077003d06carll   /*  dcbt RA, RB, TH */
3387f13107a45926fa51c6eed7141192597077003d06carll   ASM_DCBT(17, 14, 10);
3388f13107a45926fa51c6eed7141192597077003d06carll   ASM_DCBT(17, 14, 0);
3389f13107a45926fa51c6eed7141192597077003d06carll   ASM_DCBT(17, 14, 16);
3390074637e5b8af220614f9727bccc177e482b7ddc5carll}
3391074637e5b8af220614f9727bccc177e482b7ddc5carll
3392074637e5b8af220614f9727bccc177e482b7ddc5carllstatic void test_dcbtst (void)
3393074637e5b8af220614f9727bccc177e482b7ddc5carll{
3394f13107a45926fa51c6eed7141192597077003d06carll   /*  dcbtst RA, RB, TH */
3395f13107a45926fa51c6eed7141192597077003d06carll   ASM_DCBTST(17, 14, 6);
3396f13107a45926fa51c6eed7141192597077003d06carll   ASM_DCBTST(17, 14, 15);
3397074637e5b8af220614f9727bccc177e482b7ddc5carll}
3398074637e5b8af220614f9727bccc177e482b7ddc5carll
3399074637e5b8af220614f9727bccc177e482b7ddc5carll
3400074637e5b8af220614f9727bccc177e482b7ddc5carllstatic test_t tests_dcbt[] = {
3401074637e5b8af220614f9727bccc177e482b7ddc5carll    { &test_dcbtct       , "   dcbtct", },
3402074637e5b8af220614f9727bccc177e482b7ddc5carll    { &test_dcbtds       , "   dcbtds", },
3403074637e5b8af220614f9727bccc177e482b7ddc5carll    { &test_dcbtst       , "   dcbtst", },
3404074637e5b8af220614f9727bccc177e482b7ddc5carll    { NULL,                   NULL,           },
3405074637e5b8af220614f9727bccc177e482b7ddc5carll};
3406074637e5b8af220614f9727bccc177e482b7ddc5carll
3407074637e5b8af220614f9727bccc177e482b7ddc5carll
3408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
3409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchw (void)
3410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchw       17, 14, 15");
3412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwo (void)
3415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwo      17, 14, 15");
3417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchws (void)
3420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchws      17, 14, 15");
3422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwso (void)
3425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwso     17, 14, 15");
3427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsu (void)
3430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsu     17, 14, 15");
3432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsuo (void)
3435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsuo    17, 14, 15");
3437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwu (void)
3440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwu      17, 14, 15");
3442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwuo (void)
3445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwuo     17, 14, 15");
3447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhw (void)
3450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhw       17, 14, 15");
3452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwo (void)
3455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwo      17, 14, 15");
3457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhws (void)
3460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhws      17, 14, 15");
3462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwso (void)
3465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwso     17, 14, 15");
3467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsu (void)
3470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsu     17, 14, 15");
3472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsuo (void)
3475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsuo    17, 14, 15");
3477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwu (void)
3480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwu      17, 14, 15");
3482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwuo (void)
3485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwuo     17, 14, 15");
3487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhw (void)
3490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhw       17, 14, 15");
3492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwo (void)
3495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwo      17, 14, 15");
3497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhws (void)
3500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhws      17, 14, 15");
3502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwso (void)
3505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwso     17, 14, 15");
3507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsu (void)
3510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsu     17, 14, 15");
3512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsuo (void)
3515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsuo    17, 14, 15");
3517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwu (void)
3520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwu      17, 14, 15");
3522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwuo (void)
3525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwuo     17, 14, 15");
3527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchw (void)
3530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchw       17, 14, 15");
3532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchwu (void)
3535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchwu      17, 14, 15");
3537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhw (void)
3540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhw       17, 14, 15");
3542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhwu (void)
3545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhwu      17, 14, 15");
3547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhw (void)
3550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhw       17, 14, 15");
3552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhwu (void)
3555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhwu      17, 14, 15");
3557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchw (void)
3560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchw      17, 14, 15");
3562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwo (void)
3565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwo     17, 14, 15");
3567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchws (void)
3570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchws     17, 14, 15");
3572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwso (void)
3575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwso    17, 14, 15");
3577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhw (void)
3580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhw      17, 14, 15");
3582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwo (void)
3585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwo     17, 14, 15");
3587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhws (void)
3590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhws     17, 14, 15");
3592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwso (void)
3595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwso    17, 14, 15");
3597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhw (void)
3600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhw      17, 14, 15");
3602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwo (void)
3605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwo     17, 14, 15");
3607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhws (void)
3610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhws     17, 14, 15");
3612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwso (void)
3615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwso    17, 14, 15");
3617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_p4m_ops_two[] = {
3620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchw          , "      macchw", },
3621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwo         , "     macchwo", },
3622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchws         , "     macchws", },
3623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwso        , "    macchwso", },
3624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsu        , "    macchwsu", },
3625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsuo       , "   macchwsuo", },
3626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwu         , "     macchwu", },
3627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwuo        , "    macchwuo", },
3628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhw          , "      machhw", },
3629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwo         , "     machhwo", },
3630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhws         , "     machhws", },
3631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwso        , "    machhwso", },
3632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsu        , "    machhwsu", },
3633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsuo       , "   machhwsuo", },
3634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwu         , "     machhwu", },
3635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwuo        , "    machhwuo", },
3636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhw          , "      maclhw", },
3637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwo         , "     maclhwo", },
3638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhws         , "     maclhws", },
3639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwso        , "    maclhwso", },
3640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsu        , "    maclhwsu", },
3641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsuo       , "   maclhwsuo", },
3642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwu         , "     maclhwu", },
3643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwuo        , "    maclhwuo", },
3644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchw          , "      mulchw", },
3645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchwu         , "     mulchwu", },
3646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhw          , "      mulhhw", },
3647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhwu         , "     mulhhwu", },
3648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhw          , "      mullhw", },
3649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhwu         , "     mullhwu", },
3650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchw         , "     nmacchw", },
3651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwo        , "    nmacchwo", },
3652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchws        , "    nmacchws", },
3653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwso       , "   nmacchwso", },
3654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhw         , "     nmachhw", },
3655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwo        , "    nmachhwo", },
3656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhws        , "    nmachhws", },
3657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwso       , "   nmachhwso", },
3658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhw         , "     nmaclhw", },
3659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwo        , "    nmaclhwo", },
3660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhws        , "    nmaclhws", },
3661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwso       , "   nmaclhwso", },
3662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
3665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
3667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchw_ (void)
3668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchw.      17, 14, 15");
3670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwo_ (void)
3673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwo.     17, 14, 15");
3675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchws_ (void)
3678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchws.     17, 14, 15");
3680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwso_ (void)
3683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwso.    17, 14, 15");
3685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsu_ (void)
3688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsu.    17, 14, 15");
3690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsuo_ (void)
3693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsuo.   17, 14, 15");
3695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwu_ (void)
3698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwu.     17, 14, 15");
3700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwuo_ (void)
3703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwuo.    17, 14, 15");
3705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhw_ (void)
3708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhw.      17, 14, 15");
3710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwo_ (void)
3713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwo.     17, 14, 15");
3715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhws_ (void)
3718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhws.     17, 14, 15");
3720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwso_ (void)
3723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwso.    17, 14, 15");
3725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsu_ (void)
3728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsu.    17, 14, 15");
3730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsuo_ (void)
3733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsuo.   17, 14, 15");
3735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwu_ (void)
3738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwu.     17, 14, 15");
3740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwuo_ (void)
3743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwuo.    17, 14, 15");
3745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhw_ (void)
3748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhw.      17, 14, 15");
3750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwo_ (void)
3753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwo.     17, 14, 15");
3755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhws_ (void)
3758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhws.     17, 14, 15");
3760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwso_ (void)
3763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwso.    17, 14, 15");
3765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsu_ (void)
3768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsu.    17, 14, 15");
3770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsuo_ (void)
3773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsuo.   17, 14, 15");
3775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwu_ (void)
3778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwu.     17, 14, 15");
3780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwuo_ (void)
3783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwuo.    17, 14, 15");
3785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchw_ (void)
3788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchw.      17, 14, 15");
3790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchwu_ (void)
3793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchwu.     17, 14, 15");
3795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhw_ (void)
3798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhw.      17, 14, 15");
3800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhwu_ (void)
3803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhwu.     17, 14, 15");
3805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhw_ (void)
3808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhw.      17, 14, 15");
3810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhwu_ (void)
3813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhwu.     17, 14, 15");
3815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchw_ (void)
3818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchw.     17, 14, 15");
3820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwo_ (void)
3823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwo.    17, 14, 15");
3825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchws_ (void)
3828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchws.    17, 14, 15");
3830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwso_ (void)
3833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwso.   17, 14, 15");
3835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhw_ (void)
3838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhw.     17, 14, 15");
3840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwo_ (void)
3843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwo.    17, 14, 15");
3845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhws_ (void)
3848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhws.    17, 14, 15");
3850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwso_ (void)
3853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwso.   17, 14, 15");
3855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhw_ (void)
3858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhw.     17, 14, 15");
3860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwo_ (void)
3863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwo.    17, 14, 15");
3865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhws_ (void)
3868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhws.    17, 14, 15");
3870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwso_ (void)
3873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwso.   17, 14, 15");
3875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_p4mc_ops_two[] = {
3878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchw_         , "     macchw.", },
3879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwo_        , "    macchwo.", },
3880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchws_        , "    macchws.", },
3881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwso_       , "   macchwso.", },
3882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsu_       , "   macchwsu.", },
3883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsuo_      , "  macchwsuo.", },
3884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwu_        , "    macchwu.", },
3885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwuo_       , "   macchwuo.", },
3886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhw_         , "     machhw.", },
3887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwo_        , "    machhwo.", },
3888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhws_        , "    machhws.", },
3889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwso_       , "   machhwso.", },
3890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsu_       , "   machhwsu.", },
3891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsuo_      , "  machhwsuo.", },
3892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwu_        , "    machhwu.", },
3893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwuo_       , "   machhwuo.", },
3894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhw_         , "     maclhw.", },
3895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwo_        , "    maclhwo.", },
3896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhws_        , "    maclhws.", },
3897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwso_       , "   maclhwso.", },
3898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsu_       , "   maclhwsu.", },
3899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsuo_      , "  maclhwsuo.", },
3900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwu_        , "    maclhwu.", },
3901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwuo_       , "   maclhwuo.", },
3902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchw_         , "     mulchw.", },
3903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchwu_        , "    mulchwu.", },
3904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhw_         , "     mulhhw.", },
3905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhwu_        , "    mulhhwu.", },
3906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhw_         , "     mullhw.", },
3907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhwu_        , "    mullhwu.", },
3908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchw_        , "    nmacchw.", },
3909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwo_       , "   nmacchwo.", },
3910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchws_       , "   nmacchws.", },
3911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwso_      , "  nmacchwso.", },
3912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhw_        , "    nmachhw.", },
3913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwo_       , "   nmachhwo.", },
3914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhws_       , "   nmachhws.", },
3915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwso_      , "  nmachhwso.", },
3916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhw_        , "    nmaclhw.", },
3917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwo_       , "   nmaclhwo.", },
3918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhws_       , "   nmaclhws.", },
3919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwso_      , "  nmaclhwso.", },
3920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
3923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_table_t all_tests[] = {
3925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ia_ops_two      ,
3927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args",
3928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010102,
3929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iar_ops_two     ,
3932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args with flags update",
3933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010102,
3934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iac_ops_two     ,
3937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args and carry",
3938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x02010102,
3939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iacr_ops_two    ,
3942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args and carry with flags update",
3943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x03010102,
3944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_two      ,
3947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with two args",
3948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010202,
3949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_two     ,
3952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with two args with flags update",
3953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010202,
3954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_icr_ops_two     ,
3957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer compare insns (two args)",
3958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010304,
3959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_icr_ops_two_i16 ,
3962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer compare with immediate insns (two args)",
3963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010305,
3964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ia_ops_two_i16  ,
3967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns\n    with one register + one 16 bits immediate args",
3968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010106,
3969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iar_ops_two_i16 ,
3972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns\n    with one register + one 16 bits immediate args with flags update",
3973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010106,
3974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_two_i16  ,
3977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns\n    with one register + one 16 bits immediate args",
3978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010206,
3979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_two_i16 ,
3982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns\n    with one register + one 16 bits immediate args with flags update",
3983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010206,
3984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_crl_ops_two     ,
3987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC condition register logical insns - two operands",
3988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010202,
3989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iac_ops_one     ,
3992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with one arg and carry",
3993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x02010101,
3994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iacr_ops_one    ,
3997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with one arg and carry with flags update",
3998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x03010101,
3999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_one      ,
4002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with one arg",
4003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010201,
4004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_one     ,
4007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with one arg with flags update",
4008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010201,
4009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_spe      ,
4012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC logical insns with special forms",
4013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010207,
4014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_spe     ,
4017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC logical insns with special forms with flags update",
4018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010207,
4019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ild_ops_two_i16 ,
4022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer load insns\n    with one register + one 16 bits immediate args with flags update",
4023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010508,
4024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ild_ops_two     ,
4027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer load insns with two register args",
4028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010509,
4029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ist_ops_three_i16,
4032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer store insns\n    with one register + one 16 bits immediate args with flags update",
4033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x0001050a,
4034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ist_ops_three   ,
4037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer store insns with three register args",
4038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x0001050b,
4039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4040a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe    {
4041a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe        tests_popcnt_ops_one   ,
4042a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe        "PPC integer population count with one register args, no flags",
4043a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe        0x00010601,
4044a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe    },
4045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
4046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fa_ops_three    ,
4048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns with three args",
4049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020103,
4050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
4052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
4053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4054c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        tests_far_ops_three    ,
4055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns\n    with three args with flags update",
4056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020103,
4057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
4059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
4060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fa_ops_two      ,
4062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns with two args",
4063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020102,
4064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
4066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
4067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_far_ops_two     ,
4069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns\n    with two args with flags update",
4070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020102,
4071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
4073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
4074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fcr_ops_two     ,
4076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point compare insns (two args)",
4077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020304,
4078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
4080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
4081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fa_ops_one      ,
4083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns with one arg",
4084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020101,
4085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
4087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
4088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_far_ops_one     ,
4090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns\n    with one arg with flags update",
4091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020101,
4092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
4094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
4095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fl_ops_spe      ,
4097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point status register manipulation insns",
4098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020207,
4099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
4101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
4102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_flr_ops_spe     ,
4104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point status register manipulation insns\n  with flags update",
4105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020207,
4106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
4108c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
4109c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    {
4110c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        tests_fld_ops_two_i16 ,
4111c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        "PPC float load insns\n    with one register + one 16 bits immediate args with flags update",
4112c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        0x00020508,
4113c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    },
4114c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
4115c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
4116c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    {
4117c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        tests_fld_ops_two     ,
4118c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        "PPC float load insns with two register args",
4119c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        0x00020509,
4120c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    },
4121c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
4122c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
4123c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    {
4124c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        tests_fst_ops_three_i16,
4125c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        "PPC float store insns\n    with one register + one 16 bits immediate args with flags update",
4126c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        0x0002050a,
4127c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    },
4128c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
4129c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT)
4130c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    {
4131c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        tests_fst_ops_three   ,
4132c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        "PPC float store insns with three register args",
4133c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion        0x0002050b,
4134c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    },
4135c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */
4136f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_aa_ops_three    ,
4139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer arith insns with three args",
4140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040103,
4141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4142f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4143f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_al_ops_three    ,
4146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer logical insns with three args",
4147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040203,
4148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4149f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4150f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_aa_ops_two      ,
4153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer arith insns with two args",
4154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040102,
4155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4156f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4157f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_al_ops_two      ,
4160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer logical insns with two args",
4161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040202,
4162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4163f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4164f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_al_ops_one      ,
4167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer logical insns with one arg",
4168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040201,
4169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4170f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4171f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ac_ops_two      ,
4174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec integer compare insns",
4175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040302,
4176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4177f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4178f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_acr_ops_two     ,
4181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec integer compare insns with flags update",
4182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01040302,
4183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4184f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4185f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_av_int_ops_spe  ,
4188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec integer special insns",
4189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040207,
4190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4191f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4192f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
419405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        tests_ald_ops_two     ,
419505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        "Altivec load insns with two register args",
419605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        0x00040509,
419705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    },
4198f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4199f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
420005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    {
420105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        tests_ast_ops_three   ,
420205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        "Altivec store insns with three register args",
420305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        0x0004050b,
420405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    },
4205f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4206f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
420705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    {
4208b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe        tests_afa_ops_two     ,
4209b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe        "Altivec floating point arith insns with two args",
4210b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe        0x00050102,
4211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4212f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4213f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4215b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe        tests_afa_ops_three   ,
4216b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe        "Altivec floating point arith insns with three args",
4217b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe        0x00050103,
4218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4219f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4220f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afa_ops_one     ,
4223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point arith insns with one arg",
4224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00050101,
4225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4226f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4227f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afc_ops_two     ,
4230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point compare insns",
4231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00050302,
4232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4233f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4234f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afcr_ops_two    ,
4237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point compare insns with flags update",
4238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01050302,
4239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4240f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4241f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
42428f5fc19da719edcd8dfca920837bde7ce1d3accacerion    {
42438f5fc19da719edcd8dfca920837bde7ce1d3accacerion        tests_av_float_ops_spe,
42448f5fc19da719edcd8dfca920837bde7ce1d3accacerion        "Altivec float special insns",
42458f5fc19da719edcd8dfca920837bde7ce1d3accacerion        0x00050207,
42468f5fc19da719edcd8dfca920837bde7ce1d3accacerion    },
4247f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
4248074637e5b8af220614f9727bccc177e482b7ddc5carll    {
4249074637e5b8af220614f9727bccc177e482b7ddc5carll        tests_dcbt,
4250074637e5b8af220614f9727bccc177e482b7ddc5carll        "Miscellaneous test: Data cache insns",
4251074637e5b8af220614f9727bccc177e482b7ddc5carll        0x0006070C,
4252074637e5b8af220614f9727bccc177e482b7ddc5carll    },
4253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
4254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_p4m_ops_two     ,
4256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC 405 mac insns with three args",
4257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00030102,
4258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
4260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
4261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
4262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_p4mc_ops_two    ,
4263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC 405 mac insns with three args with flags update",
4264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01030102,
4265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
4266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
4267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,               0x00000000, },
4268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
4269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- END #include "ops-ppc.c" -------------- */
4271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int verbose = 0;
4273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int arg_list_size = 0;
4274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4275b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic double *fargs = NULL;
4276b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_fargs = 0;
4277b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_normal_fargs = 0;
4278b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic HWord_t *iargs = NULL;
4279b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_iargs = 0;
4280b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic uint16_t *ii16 = NULL;
4281b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_ii16 = 0;
4282b5b6311a5312378c0129587d0dc0b255188a1d53sewardj
4283f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4284b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic vector unsigned int* viargs = NULL;
4285b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_viargs = 0;
4286b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic vector float* vfargs = NULL;
4287b5b6311a5312378c0129587d0dc0b255188a1d53sewardjstatic int nb_vfargs = 0;
4288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#define TEST_VSCR_SAT
4290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void register_farg (void *farg,
42938a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion                                  int s, uint16_t _exp, uint64_t mant)
4294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t tmp;
4296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
42978a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   tmp = ((uint64_t)s << 63) | ((uint64_t)_exp << 52) | mant;
4298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   *(uint64_t *)farg = tmp;
4299a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("%d %03x %013llx => %016llx %0e\n",
4301a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
4302a2a583876ee4197d0284960aeb594dc75bce2f09cerion   AB_DPRINTF("%d %03x %013lx => %016lx %0e\n",
4303a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
43048a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion              s, _exp, mant, *(uint64_t *)farg, *(double *)farg);
4305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_fargs_table (void)
4308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4309c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* Double precision:
4310c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Sign goes from zero to one               (1 bit)
4311c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Exponent goes from 0 to ((1 << 12) - 1)  (11 bits)
4312c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Mantissa goes from 1 to ((1 << 52) - 1)  (52 bits)
4313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * + special values:
4314c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +0.0      : 0 0x000 0x0000000000000 => 0x0000000000000000
4315c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -0.0      : 1 0x000 0x0000000000000 => 0x8000000000000000
4316c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +infinity : 0 0x7FF 0x0000000000000 => 0x7FF0000000000000
4317c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -infinity : 1 0x7FF 0x0000000000000 => 0xFFF0000000000000
4318c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +QNaN     : 0 0x7FF 0x7FFFFFFFFFFFF => 0x7FF7FFFFFFFFFFFF
4319c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -QNaN     : 1 0x7FF 0x7FFFFFFFFFFFF => 0xFFF7FFFFFFFFFFFF
4320c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +SNaN     : 0 0x7FF 0x8000000000000 => 0x7FF8000000000000
4321c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -SNaN     : 1 0x7FF 0x8000000000000 => 0xFFF8000000000000
4322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * (8 values)
4323c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
4324c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Ref only:
4325c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Single precision
4326c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Sign:     1 bit
4327c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Exponent: 8 bits
4328c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * Mantissa: 23 bits
4329c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +0.0      : 0 0x00 0x000000 => 0x00000000
4330c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -0.0      : 1 0x00 0x000000 => 0x80000000
4331c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +infinity : 0 0xFF 0x000000 => 0x7F800000
4332c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -infinity : 1 0xFF 0x000000 => 0xFF800000
4333c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +QNaN     : 0 0xFF 0x3FFFFF => 0x7FBFFFFF
4334c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -QNaN     : 1 0xFF 0x3FFFFF => 0xFFBFFFFF
4335c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * +SNaN     : 0 0xFF 0x400000 => 0x7FC00000
4336c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion    * -SNaN     : 1 0xFF 0x400000 => 0xFFC00000
4337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    */
4338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t mant;
43398a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   uint16_t _exp, e0, e1;
4340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int s;
4341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
4342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4343586fb038935723146cb6950b38911aeb9fc12765cerion   /* Note: VEX isn't so hot with denormals, so don't bother
43448a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion      testing them: set _exp > 0
4345586fb038935723146cb6950b38911aeb9fc12765cerion   */
4346586fb038935723146cb6950b38911aeb9fc12765cerion
4347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if ( arg_list_size == 1 ) {   // Large
4348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fargs = malloc(200 * sizeof(double));
4349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (s=0; s<2; s++) {
4350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (e0=0; e0<2; e0++) {
4351586fb038935723146cb6950b38911aeb9fc12765cerion            for (e1=0x001; ; e1 = ((e1 + 1) << 2) + 6) {
4352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 >= 0x400)
4353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  e1 = 0x3fe;
43548a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion               _exp = (e0 << 10) | e1;
4355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               for (mant = 0x0000000000001ULL; mant < (1ULL << 52);
4356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    /* Add 'random' bits */
4357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    mant = ((mant + 0x4A6) << 13) + 0x359) {
43588a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion                  register_farg(&fargs[i++], s, _exp, mant);
4359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               }
4360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 == 0x3fe)
4361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  break;
4362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
4363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
4364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {                      // Default
4366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fargs = malloc(16 * sizeof(double));
4367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (s=0; s<2; s++) {                                // x2
4368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//       for (e0=0; e0<2; e0++) {
4369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            for (e1=0x001; ; e1 = ((e1 + 1) << 13) + 7) {  // x2
4370586fb038935723146cb6950b38911aeb9fc12765cerion//          for (e1=0x001; ; e1 = ((e1 + 1) << 5) + 7) {   // x3
4371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 >= 0x400)
4372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  e1 = 0x3fe;
43738a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion//             _exp = (e0 << 10) | e1;
43748a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion               _exp = e1;
4375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               for (mant = 0x0000000000001ULL; mant < (1ULL << 52);
4376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    /* Add 'random' bits */
4377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    mant = ((mant + 0x4A6) << 29) + 0x359) {  // x2
43788a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion                  register_farg(&fargs[i++], s, _exp, mant);
4379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               }
4380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 == 0x3fe)
4381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  break;
4382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
4383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//       }
4384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4387586fb038935723146cb6950b38911aeb9fc12765cerion   /* To iterate over non-special values only */
4388586fb038935723146cb6950b38911aeb9fc12765cerion   nb_normal_fargs = i;
4389586fb038935723146cb6950b38911aeb9fc12765cerion
4390586fb038935723146cb6950b38911aeb9fc12765cerion
4391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Special values */
4392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +0.0      : 0 0x000 0x0000000000000 */
4393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
43948a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x000;
4395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
43968a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -0.0      : 1 0x000 0x0000000000000 */
4398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
43998a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x000;
4400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
44018a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +infinity : 0 0x7FF 0x0000000000000  */
4403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
44048a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
44068a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -infinity : 1 0x7FF 0x0000000000000 */
4408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
44098a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
44118a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4412c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* +QNaN     : 0 0x7FF 0x7FFFFFFFFFFFF */
4413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
44148a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x7FFFFFFFFFFFFULL;
44168a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4417c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* -QNaN     : 1 0x7FF 0x7FFFFFFFFFFFF */
4418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
44198a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x7FFFFFFFFFFFFULL;
44218a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4422c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* +SNaN     : 0 0x7FF 0x8000000000000 */
4423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
44248a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x8000000000000ULL;
44268a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4427c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* -SNaN     : 1 0x7FF 0x8000000000000 */
4428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
44298a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x7FF;
4430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x8000000000000ULL;
44318a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_farg(&fargs[i++], s, _exp, mant);
4432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d fargs values\n", i);
4433c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
4434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_fargs = i;
4435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_iargs_table (void)
4438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t tmp;
4440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
4441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4442a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (arg_list_size == 1) {                   // Large
4444b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      iargs = malloc(400 * sizeof(HWord_t));
4445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = tmp + 1 + (tmp >> 1)) {
4446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x100000000ULL)
4447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFFFFFF;
4448b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         iargs[i++] = (HWord_t)tmp;
4449b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         AB_DPRINTF("val %08x\n", (HWord_t)tmp);
4450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFFFFFF)
4451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
4452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {                                    // Default
4454b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      iargs = malloc(10 * sizeof(HWord_t));
4455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // for (tmp = 0; ; tmp = 71*tmp + 1 + (tmp>>1)) {  // gives 8
4456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // for (tmp = 0; ; tmp = 100000*tmp + 1 + (tmp>>1)) {  // gives 4
4457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = 999999*tmp + 999999) {  // gives 3
4458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x100000000ULL)
4459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFFFFFF;
4460b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         iargs[i++] = (HWord_t)tmp;
4461b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         AB_DPRINTF("val %08x\n", (HWord_t)tmp);
4462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFFFFFF)
4463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
4464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4466a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
4467a2a583876ee4197d0284960aeb594dc75bce2f09cerion   if (arg_list_size == 1) {                   // Large
4468a2a583876ee4197d0284960aeb594dc75bce2f09cerion      iargs = malloc(800 * sizeof(HWord_t));
4469a2a583876ee4197d0284960aeb594dc75bce2f09cerion      for (tmp=0; ; tmp = 2*tmp + 1 + (tmp >> 2)) {
4470a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if ((long)tmp < 0 )
4471a2a583876ee4197d0284960aeb594dc75bce2f09cerion            tmp = 0xFFFFFFFFFFFFFFFFULL;
4472a2a583876ee4197d0284960aeb594dc75bce2f09cerion         iargs[i++] = tmp;
4473a2a583876ee4197d0284960aeb594dc75bce2f09cerion         AB_DPRINTF("val %016lx\n", tmp);
4474a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if (tmp == 0xFFFFFFFFFFFFFFFFULL)
4475a2a583876ee4197d0284960aeb594dc75bce2f09cerion            break;
4476a2a583876ee4197d0284960aeb594dc75bce2f09cerion      }
4477a2a583876ee4197d0284960aeb594dc75bce2f09cerion   } else {                                    // Default
4478a2a583876ee4197d0284960aeb594dc75bce2f09cerion      iargs = malloc(20 * sizeof(HWord_t));
4479a2a583876ee4197d0284960aeb594dc75bce2f09cerion      // for (tmp=0; ; tmp = 9999*tmp + 999999) {  // gives 6
4480a2a583876ee4197d0284960aeb594dc75bce2f09cerion      for (tmp = 0; ; tmp = 123456789*tmp + 123456789999) {  // gives 3
4481a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if ((long)tmp < 0 )
4482a2a583876ee4197d0284960aeb594dc75bce2f09cerion            tmp = 0xFFFFFFFFFFFFFFFFULL;
4483a2a583876ee4197d0284960aeb594dc75bce2f09cerion         iargs[i++] = tmp;
4484a2a583876ee4197d0284960aeb594dc75bce2f09cerion         AB_DPRINTF("val %016lx\n", tmp);
4485a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if (tmp == 0xFFFFFFFFFFFFFFFFULL)
4486a2a583876ee4197d0284960aeb594dc75bce2f09cerion            break;
4487a2a583876ee4197d0284960aeb594dc75bce2f09cerion      }
4488a2a583876ee4197d0284960aeb594dc75bce2f09cerion   }
4489a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifndef __powerpc64__
4490a2a583876ee4197d0284960aeb594dc75bce2f09cerion
4491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d iargs values\n", i);
4492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_iargs = i;
4493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_ii16_table (void)
4496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t tmp;
4498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
4499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (arg_list_size == 1) {                   // Large
4501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ii16 = malloc(200 * sizeof(uint32_t));
4502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = tmp + 1 + (tmp >> 2)) {
4503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x10000)
4504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFF;
4505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ii16[i++] = tmp;
4506b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         AB_DPRINTF("val %04x\n", tmp);
4507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFF)
4508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
4509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {                                    // Default
4511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ii16 = malloc(10 * sizeof(uint32_t));
4512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = 999*tmp + 999) {  // gives 3
4513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x10000)
4514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFF;
4515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ii16[i++] = tmp;
4516b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         AB_DPRINTF("val %04x\n", tmp);
4517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFF)
4518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
4519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d ii16 values\n", i);
4522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_ii16 = i;
4523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4525f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
4526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_viargs_table (void)
4527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (ALTIVEC_ARGS_LARGE)
4529f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int i=2;
453083b62cbbab29bde83eba40231f307c2a311e73c8njn   viargs = memalign16(i * sizeof(vector unsigned int));
4531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   viargs[0] = (vector unsigned int) { 0x01020304,0x05060708,0x090A0B0C,0x0E0D0E0F };
45328a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   AB_DPRINTF_VEC32x4( viargs[0] );
4533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   viargs[1] = (vector unsigned int) { 0xF1F2F3F4,0xF5F6F7F8,0xF9FAFBFC,0xFEFDFEFF };
45348a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   AB_DPRINTF_VEC32x4( viargs[1] );
4535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
4536f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int i,j;
4537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // build from iargs table (large/default already set)
4538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   viargs = malloc(nb_iargs * sizeof(vector unsigned int));
4539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4540f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      j = iargs[i];
4541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      viargs[i] = (vector unsigned int){ j, j*2, j*3, j*4 };
45428a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion      AB_DPRINTF_VEC32x4( viargs[i] );
4543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4545f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion
4546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d viargs values\n", i);
4547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_viargs = i;
4548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void register_vfarg (vector float* vfarg,
45518a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion                                  int s, uint8_t _exp, uint32_t mant)
4552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t tmp;
455481aab3c751b11fcfa6629b449c92bd7e3f459567sewardj   vector uint32_t* vfargI = (vector uint32_t*)vfarg;
455581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj
45568a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   tmp = ((uint64_t)s << 31) | ((uint64_t)_exp << 23) | mant;
455781aab3c751b11fcfa6629b449c92bd7e3f459567sewardj   *vfargI = (vector uint32_t){ tmp,tmp,tmp,tmp };
4558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("%d %02x %06x => %08x %0e\n",
45598a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion              s, _exp, mant, *((uint32_t*)&tmp), *(float*)&tmp);
4560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_vfargs_table (void)
4563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Sign goes from zero to one
4565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * Exponent goes from 0 to ((1 << 9) - 1)
4566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * Mantissa goes from 1 to ((1 << 24) - 1)
4567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * + special values:
45688f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * +0.0      : 0 0x00 0x000000            => 0x00000000
45698f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * -0.0      : 1 0x00 0x000000            => 0x80000000
45708f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * +infinity : 0 0xFF 0x000000            => 0x7F800000
45718f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * -infinity : 1 0xFF 0x000000            => 0xFF800000
45728f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * +SNaN     : 0 0xFF 0x7FFFFF (non-zero) => 0x7FFFFFFF
45738f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * -SNaN     : 1 0xFF 0x7FFFFF (non-zero) => 0xFFFFFFFF
45748f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * +QNaN     : 0 0xFF 0x3FFFFF (non-zero) => 0x7FBFFFFF
45758f5fc19da719edcd8dfca920837bde7ce1d3accacerion    * -QNaN     : 1 0xFF 0x3FFFFF (non-zero) => 0xFFBFFFFF
4576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * (8 values)
4577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    */
4578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t mant;
45798a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   uint16_t _exp;
4580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int s;
4581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
4582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
458405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if !defined (ALTIVEC_ARGS_LARGE)
458505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   nb_vfargs = 12;
458683b62cbbab29bde83eba40231f307c2a311e73c8njn   vfargs = memalign16(nb_vfargs * sizeof(vector float));
4587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
458805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   // 4 values:
458905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (s=0; s<2; s++) {
45908a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion      for (_exp=0x5; ; _exp += 0x9D ) {
45918a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion         if (_exp > 0xDF)
459205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion            break;
459305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         for (mant = 0x3FFFFF; mant < 0x7FFFFF;
459405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion              mant = /* random */ ((mant + 0x1A6) << 31) + 0x159) {
45958a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion            register_vfarg(&vfargs[i++], s, (uint8_t)_exp, mant);
459605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         }
459705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
459805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
459905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#else
460005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   nb_vfargs = 50;
460183b62cbbab29bde83eba40231f307c2a311e73c8njn   vfargs = memalign16(nb_vfargs * sizeof(vector float));
460205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
460305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (s=0; s<2; s++) {
46048a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion      for (_exp=0x0; ; _exp += 0x3F ) {
46058a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion         //      for (_exp=0; ; _exp = ((_exp + 1) << 1) + 3) {
46068a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion         if (_exp >= 0xFE)
46078a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion            _exp = 0xFE;
460805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         for (mant = 0x0; mant < 0x7FFFFF;
460905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion              mant = /* random */ ((mant + 0x4A6) << 5) + 0x359) {
46108a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion            register_vfarg(&vfargs[i++], s, (uint8_t)_exp, mant);
461105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         }
46128a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion         if (_exp >= 0xFE)
461305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion            break;
461405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
461505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
461605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
461705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
4618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Special values */
4619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +0.0      : 0 0x00 0x000000 */
4620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
46218a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x00;
4622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
46238a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -0.0      : 1 0x00 0x000000 */
4625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
46268a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0x00;
4627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
46288a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +infinity : 0 0xFF 0x000000  */
4631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
46328a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
4633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
46348a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -infinity : 1 0xFF 0x000000 */
4636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
46378a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
4638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
46398a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
46418a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   /* NaN: _exponent all 1s, non-zero fraction */
4642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* SNaN is a NaN with the most significant fraction bit clear.*/
46438f5fc19da719edcd8dfca920837bde7ce1d3accacerion   /* +SNaN     : 0 0xFF 0x7FFFFF */
4644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
46458a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
46468f5fc19da719edcd8dfca920837bde7ce1d3accacerion   mant = 0x7FFFFF;
46478a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
46488f5fc19da719edcd8dfca920837bde7ce1d3accacerion   /* -SNaN     : 1 0xFF 0x7FFFFF */
4649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
46508a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
46518f5fc19da719edcd8dfca920837bde7ce1d3accacerion   mant = 0x7FFFFF;
46528a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* QNaN is a NaN with the most significant fraction bit set */
46558f5fc19da719edcd8dfca920837bde7ce1d3accacerion   /* +QNaN     : 0 0xFF 0x3F0000 */
4656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
46578a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
46588f5fc19da719edcd8dfca920837bde7ce1d3accacerion   mant = 0x3FFFFF;
46598a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
46608f5fc19da719edcd8dfca920837bde7ce1d3accacerion   /* -QNaN     : 1 0xFF 0x3F0000 */
4661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
46628a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   _exp = 0xFF;
46638f5fc19da719edcd8dfca920837bde7ce1d3accacerion   mant = 0x3FFFFF;
46648a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion   register_vfarg(&vfargs[i++], s, _exp, mant);
4665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d vfargs values\n", i);
4666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
466705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   assert(i <= nb_vfargs);
466805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   nb_vfargs = i;
4669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
4673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_iargs (void)
4674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
4676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i = 0; i < nb_iargs; i++) {
4677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("iarg %d: %08x %08x %08x\n", i, iargs[i],
4678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             (unsigned int)&iargs[i], (unsigned int)iargs);
4679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_iargs16 (void)
4683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
4685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i = 0; i < nb_ii16; i++) {
4686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("iarg16 %d: %08x %08x %08x\n", i, ii16[i],
4687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             (unsigned int)&ii16[i], (unsigned int)ii16);
4688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_vfargs (void)
4692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4693f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   vector float vf;
4694f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   float f;
4695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
4696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
4697f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vf = (vector float)vfargs[i];
4698f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      f  = ((float*)&vf)[0];
4699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("vfarg %3d: %24f : %08x\n", i, f, ((unsigned int*)&f)[0]);
4700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4704530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_three_args (const char* name, test_func_t func,
4705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 unused uint32_t test_flags)
4706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
470752675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
47085f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
4709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k;
4710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
4713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_iargs; k++) {
4714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r14 = iargs[i];
4715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r15 = iargs[j];
4716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r16 = iargs[k];
4717b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
47185f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj	    SET_CR_XER_ZERO;
4719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
47205f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj	    GET_CR_XER(flags,xer);
4721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            res = r17;
4722b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4723a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n",
4725a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
47262762a738523d6f37cab30c4b1fae6a30414a81f6sewardj            printf("%s %016llx, %016llx, %016llx => %016llx (%08x %08x)\n",
4727a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   name, iargs[i], iargs[j], iargs[k], res, flags, xer);
4729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
4730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
4731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4735530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_two_args (const char* name, test_func_t func,
4736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                               uint32_t test_flags)
4737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
473852675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
47395f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer, xer_orig;
47407ea7aa23b433745c5ba163add38415aa79c92344bart   int i, j, is_div;
47417ea7aa23b433745c5ba163add38415aa79c92344bart#ifdef __powerpc64__
47427ea7aa23b433745c5ba163add38415aa79c92344bart   int zap_hi32;
47437ea7aa23b433745c5ba163add38415aa79c92344bart#endif
4744664c85989cc01a6885489b299d849eecab53abbesewardj
4745664c85989cc01a6885489b299d849eecab53abbesewardj   // catches div, divwu, divo, divwu, divwuo, and . variants
474652675269f43c06380b04bf502c509cca4ee643b6cerion   is_div = strstr(name, "divw") != NULL;
4747b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
47487ea7aa23b433745c5ba163add38415aa79c92344bart#ifdef __powerpc64__
4749b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   zap_hi32 = strstr(name, "mulhw") != NULL;
47507ea7aa23b433745c5ba163add38415aa79c92344bart#endif
4751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   xer_orig = 0x00000000;
4753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj redo:
4754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
47565f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj
4757664c85989cc01a6885489b299d849eecab53abbesewardj         /* result of division by zero is implementation dependent.
4758664c85989cc01a6885489b299d849eecab53abbesewardj            don't test it. */
4759664c85989cc01a6885489b299d849eecab53abbesewardj         if (is_div && iargs[j] == 0)
4760664c85989cc01a6885489b299d849eecab53abbesewardj            continue;
4761b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
47625f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         r14 = iargs[i];
47635f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         r15 = iargs[j];
4764b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
47655f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_XER(xer_orig);
47665f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_CR_ZERO;
4767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
47685f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR_XER(flags,xer);
4769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = r17;
4770b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4771a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %08x, %08x => %08x (%08x %08x)\n",
4773a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
4774a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if (zap_hi32) res &= 0xFFFFFFFFULL;
47752762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %016llx, %016llx => %016llx (%08x %08x)\n",
4776a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, iargs[i], iargs[j], res, flags, xer);
4778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
4780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4781664c85989cc01a6885489b299d849eecab53abbesewardj   if ((test_flags & PPC_XER_CA) && xer_orig == 0x00000000) {
4782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer_orig = 0x20000000;
4783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      goto redo;
4784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4787530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_one_arg (const char* name, test_func_t func,
4788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                               uint32_t test_flags)
4789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
479052675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
47915f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer, xer_orig;
4792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
4793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   xer_orig = 0x00000000;
4795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj redo:
4796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[i];
47985f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_XER(xer_orig);
47995f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_ZERO;
4800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
4801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
48025f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
4803b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4804a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %08x => %08x (%08x %08x)\n",
4806a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
48072762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx => %016llx (%08x %08x)\n",
4808a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, iargs[i], res, flags, xer);
4810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4811664c85989cc01a6885489b299d849eecab53abbesewardj   if ((test_flags & PPC_XER_CA) && xer_orig == 0x00000000) {
4812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer_orig = 0x20000000;
4813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      goto redo;
4814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void invalidate_icache ( void *ptr, int nbytes )
4818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
481952675269f43c06380b04bf502c509cca4ee643b6cerion   HWord_t startaddr = (HWord_t) ptr;
482052675269f43c06380b04bf502c509cca4ee643b6cerion   HWord_t endaddr   = startaddr + nbytes;
482152675269f43c06380b04bf502c509cca4ee643b6cerion   HWord_t cls       = 32; /*VG_(cache_line_size_ppc32);*/
482252675269f43c06380b04bf502c509cca4ee643b6cerion   HWord_t addr;
4823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   startaddr &= ~(cls - 1);
4825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (addr = startaddr; addr < endaddr; addr += cls)
4826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      asm volatile("dcbst 0,%0" : : "r" (addr));
4827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   asm volatile("sync");
4828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (addr = startaddr; addr < endaddr; addr += cls)
4829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      asm volatile("icbi 0,%0" : : "r" (addr));
4830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   asm volatile("sync; isync");
4831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* for god knows what reason, if this isn't inlined, the
4834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   program segfaults. */
483552675269f43c06380b04bf502c509cca4ee643b6cerionstatic inline
483652675269f43c06380b04bf502c509cca4ee643b6cerionvoid _patch_op_imm (uint32_t *p_insn, uint16_t imm, int sh, int len)
4837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
483852675269f43c06380b04bf502c509cca4ee643b6cerion   uint32_t mask = ((1 << len) - 1) << sh;
483952675269f43c06380b04bf502c509cca4ee643b6cerion   *p_insn = (*p_insn & ~mask) | ((imm<<sh) & mask);
4840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
484252675269f43c06380b04bf502c509cca4ee643b6cerionstatic inline
484352675269f43c06380b04bf502c509cca4ee643b6cerionvoid patch_op_imm (uint32_t* p_insn, uint16_t imm, int sh, int len)
4844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
484552675269f43c06380b04bf502c509cca4ee643b6cerion   _patch_op_imm(p_insn, imm, sh, len);
484652675269f43c06380b04bf502c509cca4ee643b6cerion   invalidate_icache(p_insn, 4);
484752675269f43c06380b04bf502c509cca4ee643b6cerion}
484852675269f43c06380b04bf502c509cca4ee643b6cerion
484952675269f43c06380b04bf502c509cca4ee643b6cerionstatic inline
485052675269f43c06380b04bf502c509cca4ee643b6cerionvoid patch_op_imm16 (uint32_t *p_insn, uint16_t imm)
485152675269f43c06380b04bf502c509cca4ee643b6cerion{
485252675269f43c06380b04bf502c509cca4ee643b6cerion   patch_op_imm(p_insn, imm, 0, 16);
4853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
485552675269f43c06380b04bf502c509cca4ee643b6cerion
48567c01859c190613f313f57fc4b1c6bb14124b00c7sewardj/* Copy the 2 insn function starting at p_func_F to func_buf[], and
48577c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   return a possibly different pointer, which, when called, runs the
48587c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   copy in func_buf[]. */
485952675269f43c06380b04bf502c509cca4ee643b6cerionstatic inline
48607c01859c190613f313f57fc4b1c6bb14124b00c7sewardjtest_func_t init_function( test_func_t p_func_F, uint32_t func_buf[] )
4861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
48627c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* p_func = (uint32_t*)p_func_F;
4863dd690bf8d81c9119a7228446be12e3366e202176carll#if !defined(__powerpc64__) || _CALL_ELF == 2
48647c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   func_buf[0] = p_func[0];
48657c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   func_buf[1] = p_func[1];
48667c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   return (test_func_t)&func_buf[0];
4867a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
48687c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   /* p_func points to a function descriptor, the first word of which
48697c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      points to the real code.  Copy the code itself but not the
48707c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      descriptor, and just swizzle the descriptor's entry pointer. */
48717c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint64_t* descr = (uint64_t*)p_func;
48727c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* entry = (uint32_t*)(descr[0]);
48737c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   func_buf[0] = entry[0];
48747c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   func_buf[1] = entry[1];
48757c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   descr[0] = (uint64_t)&func_buf[0];
48767c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   return (test_func_t)descr;
4877a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifndef __powerpc64__
4878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
488052675269f43c06380b04bf502c509cca4ee643b6cerion
4881530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_one_reg_imm16 (const char* name,
48827c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                                    test_func_t func_IN,
4883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
4884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
48857c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
48867c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
488752675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
48885f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
4889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
489052675269f43c06380b04bf502c509cca4ee643b6cerion
4891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_ii16; j++) {
489352675269f43c06380b04bf502c509cca4ee643b6cerion         /* Patch up the instruction */
48947c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
489552675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm16(&func_buf[0], ii16[j]);
489652675269f43c06380b04bf502c509cca4ee643b6cerion
4897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = iargs[i];
4898b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
48995f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_CR_XER_ZERO;
4900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
49015f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR_XER(flags,xer);
4902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = r17;
4903b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4904a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
4905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %08x, %08x => %08x (%08x %08x)\n",
4906a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
49072762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %016llx, %08x => %016llx (%08x %08x)\n",
4908a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, iargs[i], ii16[j], res, flags, xer);
4910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
4912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Special test cases for:
4916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwimi
4917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwinm
4918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwnm
4919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * srawi
4920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrf
4921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrfs
4922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrxr_cb
4923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mfcr_cb
4924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mfspr_cb
4925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mftb_cb
4926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtcrf_cb
4927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtspr_cb
4928a2a583876ee4197d0284960aeb594dc75bce2f09cerion
4929a2a583876ee4197d0284960aeb594dc75bce2f09cerion __powerpc64__ only:
4930a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldcl       rA,rS,SH,MB
4931a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldcr       rA,rS,SH,ME
4932a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldic       rA,rS,SH,MB
4933a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldicl      rA,rS,SH,MB
4934a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldicr      rA,rS,SH,ME
4935a2a583876ee4197d0284960aeb594dc75bce2f09cerion * rldimi      rA,rS,SH,MB
4936a2a583876ee4197d0284960aeb594dc75bce2f09cerion * sradi       rA,rS,SH
4937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
4938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
49397c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void rlwi_cb (const char* name, test_func_t func_IN,
4940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                     unused uint32_t test_flags)
4941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
49427c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
49437c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
494452675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
49455f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
494652675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, k, l, arg_step;
4947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
494852675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = (arg_list_size == 0) ? 31 : 3;
4949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4950b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   r17 = 0;  // rlwimi takes r17 as input: start with a clean slate.
4951b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
4952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<32; j+=arg_step) {
4954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<32; k+=arg_step) {
4955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            for (l=0; l<32; l+=arg_step) {
495652675269f43c06380b04bf502c509cca4ee643b6cerion               /* Patch up the instruction */
49577c01859c190613f313f57fc4b1c6bb14124b00c7sewardj               func = init_function( func_IN, func_buf );
495852675269f43c06380b04bf502c509cca4ee643b6cerion               _patch_op_imm(&func_buf[0], j, 11, 5);
495952675269f43c06380b04bf502c509cca4ee643b6cerion               _patch_op_imm(&func_buf[0], k, 6, 5);
496052675269f43c06380b04bf502c509cca4ee643b6cerion               patch_op_imm(&func_buf[0], l, 1, 5);
496152675269f43c06380b04bf502c509cca4ee643b6cerion
4962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r14 = iargs[i];
496352675269f43c06380b04bf502c509cca4ee643b6cerion
49645f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj               SET_CR_XER_ZERO;
4965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               (*func)();
49665f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj               GET_CR_XER(flags,xer);
4967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               res = r17;
496852675269f43c06380b04bf502c509cca4ee643b6cerion
4969a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
497052675269f43c06380b04bf502c509cca4ee643b6cerion               printf("%s %08x, %2d, %2d, %2d => %08x (%08x %08x)\n",
4971a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
49722762a738523d6f37cab30c4b1fae6a30414a81f6sewardj               printf("%s %016llx, %2d, %2d, %2d => %016llx (%08x %08x)\n",
4973a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
4974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      name, iargs[i], j, k, l, res, flags, xer);
4975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
4976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            if (verbose) printf("\n");
4977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
4978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
49827c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void rlwnm_cb (const char* name, test_func_t func_IN,
4983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
49857c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
49867c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
498752675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
49885f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
498952675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, k, l, arg_step;
4990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
499152675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = (arg_list_size == 0) ? 31 : 3;
4992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
4995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<32; k+=arg_step) {
4996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            for (l=0; l<32; l+=arg_step) {
499752675269f43c06380b04bf502c509cca4ee643b6cerion               /* Patch up the instruction */
49987c01859c190613f313f57fc4b1c6bb14124b00c7sewardj               func = init_function( func_IN, func_buf );
499952675269f43c06380b04bf502c509cca4ee643b6cerion               _patch_op_imm(&func_buf[0], k, 6, 5);
500052675269f43c06380b04bf502c509cca4ee643b6cerion               patch_op_imm(&func_buf[0], l, 1, 5);
500152675269f43c06380b04bf502c509cca4ee643b6cerion
5002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r14 = iargs[i];
5003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r15 = iargs[j];
500452675269f43c06380b04bf502c509cca4ee643b6cerion
50055f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj               SET_CR_XER_ZERO;
5006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               (*func)();
50075f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj               GET_CR_XER(flags,xer);
5008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               res = r17;
500952675269f43c06380b04bf502c509cca4ee643b6cerion
5010a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
501152675269f43c06380b04bf502c509cca4ee643b6cerion               printf("%s %08x, %08x, %2d, %2d => %08x (%08x %08x)\n",
5012a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
50132762a738523d6f37cab30c4b1fae6a30414a81f6sewardj               printf("%s %016llx, %016llx, %2d, %2d => %016llx (%08x %08x)\n",
5014a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      name, iargs[i], iargs[j], k, l, res, flags, xer);
5016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
5017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            if (verbose) printf("\n");
5018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
5019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
50237c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void srawi_cb (const char* name, test_func_t func_IN,
5024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
50267c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
50277c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
502852675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
50295f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
503052675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, arg_step;
5031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
503252675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = (arg_list_size == 0) ? 31 : 1;
5033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<32; j+=arg_step) {
503652675269f43c06380b04bf502c509cca4ee643b6cerion         /* Patch up the instruction */
50377c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
503852675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm(&func_buf[0], j, 11, 5);
503952675269f43c06380b04bf502c509cca4ee643b6cerion
5040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = iargs[i];
504152675269f43c06380b04bf502c509cca4ee643b6cerion
50425f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_CR_XER_ZERO;
5043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
50445f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR_XER(flags,xer);
5045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = r17;
504652675269f43c06380b04bf502c509cca4ee643b6cerion
5047a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
504852675269f43c06380b04bf502c509cca4ee643b6cerion         printf("%s %08x, %2d => %08x (%08x %08x)\n",
5049a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
50502762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %016llx, %2d => %016llx (%08x %08x)\n",
5051a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, iargs[i], j, res, flags, xer);
5053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
5055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
50587c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void mcrf_cb (const char* name, test_func_t func_IN,
5059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
50617c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
50627c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
50635f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
506452675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, k, arg_step;
5065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
506652675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = (arg_list_size == 0) ? 7 : 1;
5067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<8; j+=arg_step) {
5070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<8; k+=arg_step) {
507152675269f43c06380b04bf502c509cca4ee643b6cerion            /* Patch up the instruction */
50727c01859c190613f313f57fc4b1c6bb14124b00c7sewardj            func = init_function( func_IN, func_buf );
507352675269f43c06380b04bf502c509cca4ee643b6cerion            _patch_op_imm(&func_buf[0], j, 23, 3);
507452675269f43c06380b04bf502c509cca4ee643b6cerion            patch_op_imm(&func_buf[0], k, 18, 3);
507552675269f43c06380b04bf502c509cca4ee643b6cerion
5076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r14 = iargs[i];
507752675269f43c06380b04bf502c509cca4ee643b6cerion
50785f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            SET_CR(r14);
50795f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            SET_XER_ZERO;
5080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
50815f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            GET_CR_XER(flags,xer);
5082b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5083a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s %d, %d (%08x) => (%08x %08x)\n",
5085a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
50862762a738523d6f37cab30c4b1fae6a30414a81f6sewardj            printf("%s %d, %d (%016llx) => (%08x %08x)\n",
5087a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   name, j, k, iargs[i], flags, xer);
5089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
5090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
5091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
50957c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void mcrxr_cb (const char* name, test_func_t func_IN,
5096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
50987c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
50997c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
51005f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
510152675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, k, arg_step;
5102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
510352675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = 1; //(arg_list_size == 0) ? 7 : 1;
5104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<16; i+=arg_step) {
5106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      j = i << 28;
5107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (k=0; k<8; k+=arg_step) {
510852675269f43c06380b04bf502c509cca4ee643b6cerion         /* Patch up the instruction */
51097c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
511052675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm(&func_buf[0], k, 23, 3);
511152675269f43c06380b04bf502c509cca4ee643b6cerion
5112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = j;
511352675269f43c06380b04bf502c509cca4ee643b6cerion
51145f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj	 SET_CR_ZERO;
51155f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj	 SET_XER(r14);
5116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
51175f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR_XER(flags,xer);
5118b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %d (%08x) => (%08x %08x)\n",
5120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, k, j, flags, xer);
5121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
5123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5126530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mfcr_cb (const char* name, test_func_t func,
5127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                     unused uint32_t test_flags)
5128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
512952675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t res;
51305f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
5132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[i];
5135b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
51375f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR(r14);
51385f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_XER_ZERO;
5139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
51405f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
5142b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5143a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s (%08x) => %08x (%08x %08x)\n",
5145a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
51462762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s (%016llx) => %016llx (%08x %08x)\n",
5147a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, iargs[i], res, flags, xer);
5149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// NOTE: Not using func: calling function kills lr
5153530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mfspr_cb (const char* name, test_func_t func,
5154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5156fdeaa95698883fa09d0abefa4511cfab6466e316sewardj   //volatile uint32_t res, flags, xer, ctr, lr, tmpcr, tmpxer;
5157b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   volatile HWord_t res;
5158b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   int j, k;
515952675269f43c06380b04bf502c509cca4ee643b6cerion   func = func; // just to stop compiler complaining
5160b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5161941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   // mtxer followed by mfxer
5162941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   for (k=0; k<nb_iargs; k++) {
5163941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      j = iargs[k];
5164941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      __asm__ __volatile__(
5165941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "mtxer %1\n"
5166941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "\tmfxer %0"
51675f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         : /*out*/"=b"(res) : /*in*/"b"(j) : /*trashed*/"xer"
5168941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      );
5169941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      res &= 0xE000007F; /* rest of the bits are undefined */
5170b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5171a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
517252675269f43c06380b04bf502c509cca4ee643b6cerion      printf("%s 1 (%08x) -> mtxer -> mfxer => %08x\n",
5173a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
51742762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s 1 (%08x) -> mtxer -> mfxer => %016llx\n",
5175a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5176941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj             name, j, res);
5177941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   }
5178941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj
5179941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   // mtlr followed by mflr
5180941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   for (k=0; k<nb_iargs; k++) {
5181941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      j = iargs[k];
5182941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      __asm__ __volatile__(
5183941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "mtlr %1\n"
5184941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "\tmflr %0"
51855f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         : /*out*/"=b"(res) : /*in*/"b"(j) : /*trashed*/"lr"
5186941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      );
5187b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5188a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
518952675269f43c06380b04bf502c509cca4ee643b6cerion      printf("%s 8 (%08x) ->  mtlr ->  mflr => %08x\n",
5190a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
51912762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s 8 (%08x) ->  mtlr ->  mflr => %016llx\n",
5192a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5193941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj             name, j, res);
5194941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   }
5195941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj
5196941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   // mtctr followed by mfctr
5197941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   for (k=0; k<nb_iargs; k++) {
5198941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      j = iargs[k];
5199941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      __asm__ __volatile__(
5200941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "mtctr %1\n"
5201941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj         "\tmfctr %0"
52025f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         : /*out*/"=b"(res) : /*in*/"b"(j) : /*trashed*/"ctr"
5203941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj      );
5204b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5205a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
520652675269f43c06380b04bf502c509cca4ee643b6cerion      printf("%s 9 (%08x) -> mtctr -> mfctr => %08x\n",
5207a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
52082762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s 9 (%08x) -> mtctr -> mfctr => %016llx\n",
5209a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5210941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj             name, j, res);
5211941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj   }
5212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
52147c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void mtcrf_cb (const char* name, test_func_t func_IN,
5215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
52177c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
52187c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
52195f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
522052675269f43c06380b04bf502c509cca4ee643b6cerion   int i, j, arg_step;
5221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
522252675269f43c06380b04bf502c509cca4ee643b6cerion   arg_step = (arg_list_size == 0) ? 99 : 1;
5223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<256; j+=arg_step) {
522652675269f43c06380b04bf502c509cca4ee643b6cerion         /* Patch up the instruction */
52277c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
522852675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm(&func_buf[0], j, 12, 8);
522952675269f43c06380b04bf502c509cca4ee643b6cerion
5230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = iargs[i];
523152675269f43c06380b04bf502c509cca4ee643b6cerion
52325f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_CR_XER_ZERO;
5233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
52345f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR_XER(flags,xer);
5235b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5236a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
523752675269f43c06380b04bf502c509cca4ee643b6cerion         printf("%s %3d, %08x => (%08x %08x)\n",
5238a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
52392762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %3d, %016llx => (%08x %08x)\n",
5240a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, j, iargs[i], flags, xer);
5242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
5244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// NOTE: Not using func: calling function kills lr
5248530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mtspr_cb (const char* name, test_func_t func,
5249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5253a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
52547c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void rldc_cb (const char* name, test_func_t func_IN,
5255a2a583876ee4197d0284960aeb594dc75bce2f09cerion                     unused uint32_t test_flags)
5256a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
52577c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
52587c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
5259a2a583876ee4197d0284960aeb594dc75bce2f09cerion   volatile HWord_t res;
5260e1494c6807bd1744d615ce52d97599168eddb2edsewardj   volatile uint32_t flags, xer;
5261a2a583876ee4197d0284960aeb594dc75bce2f09cerion   int i, j, k, arg_step;
5262a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5263a2a583876ee4197d0284960aeb594dc75bce2f09cerion   arg_step = (arg_list_size == 0) ? 7 : 3;
5264a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5265a2a583876ee4197d0284960aeb594dc75bce2f09cerion   for (i=0; i<nb_iargs; i++) {
5266a2a583876ee4197d0284960aeb594dc75bce2f09cerion      for (j=0; j<nb_iargs; j++) {
5267a2a583876ee4197d0284960aeb594dc75bce2f09cerion         for (k=0; k<64; k+=arg_step) {
5268a2a583876ee4197d0284960aeb594dc75bce2f09cerion            /* Patch up the instruction */
52697c01859c190613f313f57fc4b1c6bb14124b00c7sewardj            func = init_function( func_IN, func_buf );
5270a2a583876ee4197d0284960aeb594dc75bce2f09cerion            patch_op_imm(&func_buf[0], (((k & 0x1F)<<1) | ((k>>5)&1)), 5, 6);
5271a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5272a2a583876ee4197d0284960aeb594dc75bce2f09cerion            r14 = iargs[i];
5273a2a583876ee4197d0284960aeb594dc75bce2f09cerion            r15 = iargs[j];
5274a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5275e1494c6807bd1744d615ce52d97599168eddb2edsewardj            SET_CR_XER_ZERO;
5276a2a583876ee4197d0284960aeb594dc75bce2f09cerion            (*func)();
5277e1494c6807bd1744d615ce52d97599168eddb2edsewardj            GET_CR_XER(flags,xer);
5278a2a583876ee4197d0284960aeb594dc75bce2f09cerion            res = r17;
5279a2a583876ee4197d0284960aeb594dc75bce2f09cerion
52802762a738523d6f37cab30c4b1fae6a30414a81f6sewardj            printf("%s %016llx, %016llx, %2d => %016llx (%08x %08x)\n",
5281a2a583876ee4197d0284960aeb594dc75bce2f09cerion                   name, iargs[i], iargs[j], k, res, flags, xer);
5282a2a583876ee4197d0284960aeb594dc75bce2f09cerion         }
5283a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if (verbose) printf("\n");
5284a2a583876ee4197d0284960aeb594dc75bce2f09cerion      }
5285a2a583876ee4197d0284960aeb594dc75bce2f09cerion   }
5286a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
5287a2a583876ee4197d0284960aeb594dc75bce2f09cerion
52887c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void rldi_cb (const char* name, test_func_t func_IN,
5289a2a583876ee4197d0284960aeb594dc75bce2f09cerion                     unused uint32_t test_flags)
5290a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
52917c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
52927c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
5293a2a583876ee4197d0284960aeb594dc75bce2f09cerion   volatile HWord_t res;
5294e1494c6807bd1744d615ce52d97599168eddb2edsewardj   volatile uint32_t flags, xer;
5295a2a583876ee4197d0284960aeb594dc75bce2f09cerion   int i, j, k, arg_step;
5296a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5297a2a583876ee4197d0284960aeb594dc75bce2f09cerion   arg_step = (arg_list_size == 0) ? 7 : 3;
5298a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5299a2a583876ee4197d0284960aeb594dc75bce2f09cerion   for (i=0; i<nb_iargs; i++) {
5300a2a583876ee4197d0284960aeb594dc75bce2f09cerion      for (j=0; j<64; j+=arg_step) {     // SH
5301a2a583876ee4197d0284960aeb594dc75bce2f09cerion         for (k=0; k<64; k+=arg_step) {  // MB|ME
5302a2a583876ee4197d0284960aeb594dc75bce2f09cerion            /* Patch up the instruction */
53037c01859c190613f313f57fc4b1c6bb14124b00c7sewardj            func = init_function( func_IN, func_buf );
5304a2a583876ee4197d0284960aeb594dc75bce2f09cerion            _patch_op_imm(&func_buf[0], (j & 0x1F), 11, 5);
5305a2a583876ee4197d0284960aeb594dc75bce2f09cerion            _patch_op_imm(&func_buf[0], ((j>>5)&1), 1, 1);
5306a2a583876ee4197d0284960aeb594dc75bce2f09cerion            patch_op_imm(&func_buf[0], (((k & 0x1F)<<1) | ((k>>5)&1)), 5, 6);
5307a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5308a2a583876ee4197d0284960aeb594dc75bce2f09cerion            r14 = iargs[i];
5309a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5310e1494c6807bd1744d615ce52d97599168eddb2edsewardj            SET_CR_XER_ZERO;
5311a2a583876ee4197d0284960aeb594dc75bce2f09cerion            (*func)();
5312e1494c6807bd1744d615ce52d97599168eddb2edsewardj            GET_CR_XER(flags,xer);
5313a2a583876ee4197d0284960aeb594dc75bce2f09cerion            res = r17;
5314a2a583876ee4197d0284960aeb594dc75bce2f09cerion
53152762a738523d6f37cab30c4b1fae6a30414a81f6sewardj            printf("%s %016llx, %2d, %2d => %016llx (%08x %08x)\n",
5316a2a583876ee4197d0284960aeb594dc75bce2f09cerion                   name, iargs[i], j, k, res, flags, xer);
5317a2a583876ee4197d0284960aeb594dc75bce2f09cerion         }
5318a2a583876ee4197d0284960aeb594dc75bce2f09cerion         if (verbose) printf("\n");
5319a2a583876ee4197d0284960aeb594dc75bce2f09cerion      }
5320a2a583876ee4197d0284960aeb594dc75bce2f09cerion   }
5321a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
5322a2a583876ee4197d0284960aeb594dc75bce2f09cerion
53237c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void sradi_cb (const char* name, test_func_t func_IN,
5324a2a583876ee4197d0284960aeb594dc75bce2f09cerion                      unused uint32_t test_flags)
5325a2a583876ee4197d0284960aeb594dc75bce2f09cerion{
53267c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
53277c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
5328a2a583876ee4197d0284960aeb594dc75bce2f09cerion   volatile HWord_t res;
5329e1494c6807bd1744d615ce52d97599168eddb2edsewardj   volatile uint32_t flags, xer;
5330a2a583876ee4197d0284960aeb594dc75bce2f09cerion   int i, j, arg_step;
5331a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5332a2a583876ee4197d0284960aeb594dc75bce2f09cerion   arg_step = (arg_list_size == 0) ? 7 : 3;
5333a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5334a2a583876ee4197d0284960aeb594dc75bce2f09cerion   for (i=0; i<nb_iargs; i++) {
5335a2a583876ee4197d0284960aeb594dc75bce2f09cerion      for (j=0; j<64; j+=arg_step) {     // SH
5336a2a583876ee4197d0284960aeb594dc75bce2f09cerion         /* Patch up the instruction */
53377c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
5338a2a583876ee4197d0284960aeb594dc75bce2f09cerion         _patch_op_imm(&func_buf[0], (j & 0x1F), 11, 5);
5339a2a583876ee4197d0284960aeb594dc75bce2f09cerion         patch_op_imm(&func_buf[0], ((j>>5)&1), 1, 1);
5340a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5341a2a583876ee4197d0284960aeb594dc75bce2f09cerion         r14 = iargs[i];
5342a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5343e1494c6807bd1744d615ce52d97599168eddb2edsewardj         SET_CR_XER_ZERO;
5344a2a583876ee4197d0284960aeb594dc75bce2f09cerion         (*func)();
5345e1494c6807bd1744d615ce52d97599168eddb2edsewardj         GET_CR_XER(flags,xer);
5346a2a583876ee4197d0284960aeb594dc75bce2f09cerion         res = r17;
5347a2a583876ee4197d0284960aeb594dc75bce2f09cerion
53482762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %016llx, %2d => %016llx (%08x %08x)\n",
5349a2a583876ee4197d0284960aeb594dc75bce2f09cerion                name, iargs[i], j, res, flags, xer);
5350a2a583876ee4197d0284960aeb594dc75bce2f09cerion      }
5351a2a583876ee4197d0284960aeb594dc75bce2f09cerion      if (verbose) printf("\n");
5352a2a583876ee4197d0284960aeb594dc75bce2f09cerion   }
5353a2a583876ee4197d0284960aeb594dc75bce2f09cerion}
5354a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
5355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct special_t special_t;
5358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct special_t {
5360530f73578552bc876a51fbf90cb6be29769bb362sewardj   const char *name;
5361530f73578552bc876a51fbf90cb6be29769bb362sewardj   void (*test_cb)(const char* name, test_func_t func,
5362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   unused uint32_t test_flags);
5363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_special (special_t *table,
5366530f73578552bc876a51fbf90cb6be29769bb362sewardj                          const char* name, test_func_t func,
5367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                          unused uint32_t test_flags)
5368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5369530f73578552bc876a51fbf90cb6be29769bb362sewardj   const char *tmp;
5370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
5371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (tmp = name; isspace(*tmp); tmp++)
5373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      continue;
5374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; table[i].name != NULL; i++) {
5375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
5376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fprintf(stderr, "look for handler for '%s' (%s)\n", name,
5377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj              table[i].name);
5378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (strcmp(table[i].name, tmp) == 0) {
5380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*table[i].test_cb)(name, func, test_flags);
5381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return;
5382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   fprintf(stderr, "ERROR: no test found for op '%s'\n", name);
5385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_int_ops[] = {
5388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwimi", /* One register + 3 5 bits immediate arguments */
5390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
5391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwimi.", /* One register + 3 5 bits immediate arguments */
5394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
5395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwinm", /* One register + 3 5 bits immediate arguments */
5398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
5399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwinm.", /* One register + 3 5 bits immediate arguments */
5402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
5403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwnm",  /* Two registers + 2 5 bits immediate arguments */
5406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwnm_cb,
5407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwnm.",  /* Two registers + 2 5 bits immediate arguments */
5410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwnm_cb,
5411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "srawi",  /* One register + 1 5 bits immediate arguments */
5414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &srawi_cb,
5415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "srawi.",  /* One register + 1 5 bits immediate arguments */
5418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &srawi_cb,
5419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mcrf",  /* 2 3 bits immediate arguments */
5422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mcrf_cb,
5423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
5425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mcrfs",  /* 2 3 bits immediate arguments */
5427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mcrfs_cb,
5428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mcrxr",  /* 1 3 bits immediate argument */
5432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mcrxr_cb,
5433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mfcr",  /* No arguments */
5436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mfcr_cb,
5437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mfspr",  /* 1 10 bits immediate argument */
5440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mfspr_cb,
5441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
5443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {   // Move from time base
5444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mftb",  /* 1 10 bits immediate arguments */
5445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mftb_cb,
5446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtcrf",  /* One register + 1 8 bits immediate arguments */
5450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtcrf_cb,
5451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtspr",  /* One register + 1 10 bits immediate arguments */
5454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtspr_cb,
5455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5456a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
5457a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5458a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldcl",   /* Two registers + 1 6 bit immediate argument */
5459a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldc_cb,
5460a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5461a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5462a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldcl.",  /* Two registers + 1 6 bit immediate argument */
5463a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldc_cb,
5464a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5465a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5466a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldcr",   /* Two registers + 1 6 bit immediate argument */
5467a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldc_cb,
5468a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5469a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5470a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldcr.",  /* Two registers + 1 6 bit immediate argument */
5471a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldc_cb,
5472a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5473a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5474a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldic",   /* One register + 2 6 bit immediate arguments */
5475a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5476a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5477a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5478a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldic.",  /* One register + 2 6 bit immediate arguments */
5479a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5480a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5481a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5482a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldicl",  /* One register + 2 6 bit immediate arguments */
5483a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5484a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5485a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5486a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldicl.", /* One register + 2 6 bit immediate arguments */
5487a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5488a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5489a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5490a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldicr",  /* One register + 2 6 bit immediate arguments */
5491a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5492a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5493a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5494a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldicr.", /* One register + 2 6 bit immediate arguments */
5495a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5496a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5497a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5498a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldimi",  /* One register + 2 6 bit immediate arguments */
5499a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5500a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5501a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5502a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "rldimi.", /* One register + 2 6 bit immediate arguments */
5503a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &rldi_cb,
5504a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5505a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5506a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "sradi",  /* One register + 1 6 bit immediate argument */
5507a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &sradi_cb,
5508a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5509a2a583876ee4197d0284960aeb594dc75bce2f09cerion   {
5510a2a583876ee4197d0284960aeb594dc75bce2f09cerion      "sradi.", /* One register + 1 6 bit immediate argument */
5511a2a583876ee4197d0284960aeb594dc75bce2f09cerion      &sradi_cb,
5512a2a583876ee4197d0284960aeb594dc75bce2f09cerion   },
5513a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif // #ifdef __powerpc64__
5514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
5516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
5517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5520530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_special (const char* name, test_func_t func,
5521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                              uint32_t test_flags)
5522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_special(special_int_ops, name, func, test_flags);
5524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5527530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_ld_one_reg_imm16 (const char* name,
55287c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                                       test_func_t func_IN,
5529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                       unused uint32_t test_flags)
5530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
55317c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
55327c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
5533b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   volatile HWord_t res, base;
55345f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5535dd690bf8d81c9119a7228446be12e3366e202176carll   int i, offs, shift_offset = 0;
5536a2a583876ee4197d0284960aeb594dc75bce2f09cerion
5537a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifdef __powerpc64__
5538dd690bf8d81c9119a7228446be12e3366e202176carll   if (strstr(name, "lwa") || strstr(name, "ld") || strstr(name, "ldu"))
5539dd690bf8d81c9119a7228446be12e3366e202176carll      shift_offset = 1;
5540a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5541b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // +ve d
5543b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs[0];
5544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5545dd690bf8d81c9119a7228446be12e3366e202176carll      offs = (i == 0) ? i : (i * sizeof(HWord_t)) - 1;
554652675269f43c06380b04bf502c509cca4ee643b6cerion
554752675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
55487c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func_IN, func_buf );
5549dd690bf8d81c9119a7228446be12e3366e202176carll      if (shift_offset)
5550a2a583876ee4197d0284960aeb594dc75bce2f09cerion         patch_op_imm(&func_buf[0], offs>>2, 2, 14);
5551a2a583876ee4197d0284960aeb594dc75bce2f09cerion      else
5552a2a583876ee4197d0284960aeb594dc75bce2f09cerion         patch_op_imm16(&func_buf[0], offs);
555352675269f43c06380b04bf502c509cca4ee643b6cerion
5554b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = base;
5555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
55565f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
55585f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
5560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5561a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5562b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %2d, (%08x) => %08x, %2d (%08x %08x)\n",
5563a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
55642762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %3d, (%016llx) => %016llx, %3lld (%08x %08x)\n",
5565a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5566b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, offs, iargs[i], res, r14-base, flags, xer);
5567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose) printf("\n");
5569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // -ve d
5571b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs[nb_iargs-1];
5572dd690bf8d81c9119a7228446be12e3366e202176carll   for (i = 0; i > -nb_iargs; i--) {
5573dd690bf8d81c9119a7228446be12e3366e202176carll      offs = (i * sizeof(HWord_t)) + 1;
557452675269f43c06380b04bf502c509cca4ee643b6cerion
557552675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
55767c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func, func_buf );
5577b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      patch_op_imm16(&func_buf[0], offs);
557852675269f43c06380b04bf502c509cca4ee643b6cerion
5579b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = base;
5580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
55815f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
55835f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
5585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5586a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5587b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %2d, (%08x) => %08x, %2d (%08x %08x)\n",
5588a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
558925fc405cf79c5b1c0a3fa13c40d0909863062245carll      printf("%s %3d, (%016llx) => %016llx, %3lld (%08x %08x)\n",
5590a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5591dd690bf8d81c9119a7228446be12e3366e202176carll             name, offs, iargs[nb_iargs-1 + i], res, r14-base, flags, xer);
5592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5595530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_ld_two_regs (const char* name,
5596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  test_func_t func,
5597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  unused uint32_t test_flags)
5598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5599b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   volatile HWord_t res, base;
56005f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5601b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   int i, offs;
5602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // +ve d
5604b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs[0];
5605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5606b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * sizeof(HWord_t);
5607b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = base;
5608b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r15 = offs;
5609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
56105f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
56125f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
5614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5615a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5616b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %d (%08x) => %08x, %d (%08x %08x)\n",
5617a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
56182762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %3d, (%016llx) => %016llx, %2lld (%08x %08x)\n",
5619a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5620b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, offs, iargs[i], res, r14-base, flags, xer);
5621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5624530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_st_two_regs_imm16 (const char* name,
56257c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                                        test_func_t func_IN,
5626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                        unused uint32_t test_flags)
5627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
56287c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
56297c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
56305f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5631b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   int i, offs, k;
5632b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   HWord_t *iargs_priv, base;
5633b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // private iargs table to store to
563552675269f43c06380b04bf502c509cca4ee643b6cerion   iargs_priv = malloc(nb_iargs * sizeof(HWord_t));
5636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // +ve d
5638b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs_priv[0];
5639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
564052675269f43c06380b04bf502c509cca4ee643b6cerion      for (k=0; k<nb_iargs; k++)  // clear array
564152675269f43c06380b04bf502c509cca4ee643b6cerion         iargs_priv[k] = 0;
564252675269f43c06380b04bf502c509cca4ee643b6cerion
5643b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * sizeof(HWord_t);
5644b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
564552675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
56467c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func_IN, func_buf );
5647b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      patch_op_imm16(&func_buf[0], offs);
564852675269f43c06380b04bf502c509cca4ee643b6cerion
5649b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = iargs[i];             // read from iargs
5650b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r15 = base;                 // store to r15 + offs
5651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
56525f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
56545f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5656a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5657b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %08x, %2d => %08x, %2d (%08x %08x)\n",
5658a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
56592762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %3d => %016llx, %3lld (%08x %08x)\n",
5660a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5661b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, iargs[i], offs, iargs_priv[i], r15-base, flags, xer);
5662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose) printf("\n");
5664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // -ve d
5666b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs_priv[nb_iargs-1];
5667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i = -nb_iargs+1; i<=0; i++) {
566852675269f43c06380b04bf502c509cca4ee643b6cerion      for (k=0; k<nb_iargs; k++)  // clear array
566952675269f43c06380b04bf502c509cca4ee643b6cerion         iargs_priv[k] = 0;
567052675269f43c06380b04bf502c509cca4ee643b6cerion
5671b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * sizeof(HWord_t);
5672b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
567352675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
56747c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func, func_buf );
5675b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      patch_op_imm16(&func_buf[0], offs);
567652675269f43c06380b04bf502c509cca4ee643b6cerion
5677b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = iargs[nb_iargs-1+i];  // read from iargs
5678b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r15 = base;                 // store to r15 + offs
5679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
56805f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
56825f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5684a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5685b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %08x, %2d => %08x, %2d (%08x %08x)\n",
5686a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
56872762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %3d => %016llx, %3lld (%08x %08x)\n",
5688a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5689b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, iargs[nb_iargs-1+i], offs, iargs_priv[nb_iargs-1+i],
5690b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             r15-base, flags, xer);
5691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   free(iargs_priv);
5693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5695530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_st_three_regs (const char* name,
5696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    test_func_t func,
5697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
5698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
56995f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5700b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   int i, offs, k;
5701b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   HWord_t *iargs_priv, base;
5702b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // private iargs table to store to
570452675269f43c06380b04bf502c509cca4ee643b6cerion   iargs_priv = malloc(nb_iargs * sizeof(HWord_t));
5705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5706b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   base = (HWord_t)&iargs_priv[0];
5707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
570852675269f43c06380b04bf502c509cca4ee643b6cerion      for (k=0; k<nb_iargs; k++)  // clear array
570952675269f43c06380b04bf502c509cca4ee643b6cerion         iargs_priv[k] = 0;
571052675269f43c06380b04bf502c509cca4ee643b6cerion
5711b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * sizeof(HWord_t);
5712b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r14 = iargs[i];             // read from iargs
5713b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r15 = base;                 // store to r15 + offs
5714b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r16 = offs;
5715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
57165f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
5717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
57185f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
5719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5720a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5721b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %08x, %d => %08x, %d (%08x %08x)\n",
5722a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
57232762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %3d => %016llx, %2lld (%08x %08x)\n",
5724a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5725b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, iargs[i], offs, iargs_priv[i], r15-base, flags, xer);
5726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   free(iargs_priv);
5728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
5732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
5733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
5734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t int_loops[] = {
5735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_one_arg,
5736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_two_args,
5737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_three_args,
5738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_two_args,
5739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_one_reg_imm16,
5740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_one_reg_imm16,
5741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_special,
5742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_ld_one_reg_imm16,
5743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_ld_two_regs,
5744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_st_two_regs_imm16,
5745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_st_three_regs,
5746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5748074637e5b8af220614f9727bccc177e482b7ddc5carllstatic void test_dcbt_ops (const char* name, test_func_t func,
5749074637e5b8af220614f9727bccc177e482b7ddc5carll                           unused uint32_t test_flags)
5750074637e5b8af220614f9727bccc177e482b7ddc5carll{
5751074637e5b8af220614f9727bccc177e482b7ddc5carll   unsigned long * data = (unsigned long *)malloc(4096 * sizeof(unsigned long));
5752074637e5b8af220614f9727bccc177e482b7ddc5carll   HWord_t base;
5753074637e5b8af220614f9727bccc177e482b7ddc5carll
5754074637e5b8af220614f9727bccc177e482b7ddc5carll   base  = (HWord_t)data;
5755074637e5b8af220614f9727bccc177e482b7ddc5carll   size_t offs = 100 * sizeof(unsigned long);    // some arbitrary offset)
5756074637e5b8af220614f9727bccc177e482b7ddc5carll
5757074637e5b8af220614f9727bccc177e482b7ddc5carll   r17  = base;
5758074637e5b8af220614f9727bccc177e482b7ddc5carll   r14  = offs;
5759074637e5b8af220614f9727bccc177e482b7ddc5carll
5760074637e5b8af220614f9727bccc177e482b7ddc5carll   (*func)();
5761074637e5b8af220614f9727bccc177e482b7ddc5carll
5762074637e5b8af220614f9727bccc177e482b7ddc5carll   printf("%s with various hint values completes with no exceptions\n", name);
5763074637e5b8af220614f9727bccc177e482b7ddc5carll   free(data);
5764074637e5b8af220614f9727bccc177e482b7ddc5carll}
5765074637e5b8af220614f9727bccc177e482b7ddc5carll
5766074637e5b8af220614f9727bccc177e482b7ddc5carllstatic test_loop_t misc_loops[] = {
5767074637e5b8af220614f9727bccc177e482b7ddc5carll   &test_dcbt_ops,
5768074637e5b8af220614f9727bccc177e482b7ddc5carll};
5769074637e5b8af220614f9727bccc177e482b7ddc5carll
5770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
5771530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_three_args (const char* name, test_func_t func,
5772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                   unused uint32_t test_flags)
5773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   double res;
5775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t u0, u1, u2, ur;
57765f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags;
5777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k;
5778c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5779586fb038935723146cb6950b38911aeb9fc12765cerion   /* Note: using nb_normal_fargs:
5780586fb038935723146cb6950b38911aeb9fc12765cerion      - not testing special values for these insns
5781586fb038935723146cb6950b38911aeb9fc12765cerion   */
5782586fb038935723146cb6950b38911aeb9fc12765cerion   for (i=0; i<nb_normal_fargs; i+=3) {
5783586fb038935723146cb6950b38911aeb9fc12765cerion      for (j=0; j<nb_normal_fargs; j+=5) {
5784586fb038935723146cb6950b38911aeb9fc12765cerion         for (k=0; k<nb_normal_fargs; k+=7) {
5785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            u0 = *(uint64_t *)(&fargs[i]);
5786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            u1 = *(uint64_t *)(&fargs[j]);
5787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            u2 = *(uint64_t *)(&fargs[k]);
5788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            f14 = fargs[i];
5789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            f15 = fargs[j];
5790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            f16 = fargs[k];
5791c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
57925f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            SET_FPSCR_ZERO;
57935f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            SET_CR_XER_ZERO;
5794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
57955f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj            GET_CR(flags);
5796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            res = f17;
5797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            ur = *(uint64_t *)(&res);
5798b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5799586fb038935723146cb6950b38911aeb9fc12765cerion            /* Note: zapping the bottom byte of the result,
5800586fb038935723146cb6950b38911aeb9fc12765cerion               as vex's accuracy isn't perfect */
5801586fb038935723146cb6950b38911aeb9fc12765cerion            ur &= 0xFFFFFFFFFFFFFF00ULL;
5802586fb038935723146cb6950b38911aeb9fc12765cerion
5803a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5804b8efd2a1d18b2e2293527db3c8262f196008ffbecerion            printf("%s %016llx, %016llx, %016llx => %016llx",
5805a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
58062762a738523d6f37cab30c4b1fae6a30414a81f6sewardj            printf("%s %016llx, %016llx, %016llx => %016llx",
5807a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5808586fb038935723146cb6950b38911aeb9fc12765cerion                   name, u0, u1, u2, ur);
5809b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#if defined TEST_FLOAT_FLAGS
5810b8efd2a1d18b2e2293527db3c8262f196008ffbecerion            printf(" (%08x)", flags);
5811586fb038935723146cb6950b38911aeb9fc12765cerion#endif
5812b8efd2a1d18b2e2293527db3c8262f196008ffbecerion            printf("\n");
5813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
5814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
5815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5819530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_two_args (const char* name, test_func_t func,
5820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 unused uint32_t test_flags)
5821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   double res;
5823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t u0, u1, ur;
58245f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags;
5825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
5826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_fargs; i+=3) {
5828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_fargs; j+=5) {
5829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         u0 = *(uint64_t *)(&fargs[i]);
5830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         u1 = *(uint64_t *)(&fargs[j]);
5831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         f14 = fargs[i];
5832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         f15 = fargs[j];
5833b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
58345f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_FPSCR_ZERO;
58355f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         SET_CR_XER_ZERO;
5836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
58375f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj         GET_CR(flags);
5838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = f17;
5839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ur = *(uint64_t *)(&res);
5840b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
5841a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5842b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         printf("%s %016llx, %016llx => %016llx",
5843a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
58442762a738523d6f37cab30c4b1fae6a30414a81f6sewardj         printf("%s %016llx, %016llx => %016llx",
5845a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5846586fb038935723146cb6950b38911aeb9fc12765cerion                name, u0, u1, ur);
5847b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#if defined TEST_FLOAT_FLAGS
5848b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         printf(" (%08x)", flags);
5849586fb038935723146cb6950b38911aeb9fc12765cerion#endif
5850b8efd2a1d18b2e2293527db3c8262f196008ffbecerion         printf("\n");
5851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
5853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5856530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_one_arg (const char* name, test_func_t func,
5857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                unused uint32_t test_flags)
5858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   double res;
5860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t u0, ur;
58615f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags;
586263b52cfe3df319eac28ad8c8b40adde62079e07fsewardj   int i;
586363b52cfe3df319eac28ad8c8b40adde62079e07fsewardj   unsigned zap_hi_32bits, zap_lo_44bits, zap_lo_47bits;
5864586fb038935723146cb6950b38911aeb9fc12765cerion
5865586fb038935723146cb6950b38911aeb9fc12765cerion   /* if we're testing fctiw or fctiwz, zap the hi 32bits,
5866586fb038935723146cb6950b38911aeb9fc12765cerion      as they're undefined */
586763b52cfe3df319eac28ad8c8b40adde62079e07fsewardj   zap_hi_32bits = strstr(name, " fctiw")    != NULL  ? 1 : 0;
586863b52cfe3df319eac28ad8c8b40adde62079e07fsewardj   zap_lo_44bits = strstr(name, " fres")     != NULL  ? 1 : 0;
586963b52cfe3df319eac28ad8c8b40adde62079e07fsewardj   zap_lo_47bits = strstr(name, " frsqrte")  != NULL  ? 1 : 0;
587063b52cfe3df319eac28ad8c8b40adde62079e07fsewardj
587163b52cfe3df319eac28ad8c8b40adde62079e07fsewardj   assert(zap_hi_32bits + zap_lo_44bits + zap_lo_47bits <= 1);
5872586fb038935723146cb6950b38911aeb9fc12765cerion
5873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_fargs; i++) {
5874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      u0 = *(uint64_t *)(&fargs[i]);
5875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      f14 = fargs[i];
5876b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
58775f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       SET_FPSCR_ZERO;
58785f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       SET_CR_XER_ZERO;
58795f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       (*func)();
58805f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       GET_CR(flags);
58815f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       res = f17;
58825f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj       ur = *(uint64_t *)(&res);
5883586fb038935723146cb6950b38911aeb9fc12765cerion
588432b4a4264d671d072f57190fe88262ae698f6fa3philippe       if (strstr(name, " frsqrte") !=  NULL)
588532b4a4264d671d072f57190fe88262ae698f6fa3philippe          /* The 32-bit frsqrte instruction is the Floatig Reciprical Square
588632b4a4264d671d072f57190fe88262ae698f6fa3philippe           * Root Estimate instruction.  The precision of the estimate will
588732b4a4264d671d072f57190fe88262ae698f6fa3philippe           * vary from Proceesor implementation.  The approximation varies in
588832b4a4264d671d072f57190fe88262ae698f6fa3philippe           * bottom two bytes of the 32-bit result.
588932b4a4264d671d072f57190fe88262ae698f6fa3philippe           */
589032b4a4264d671d072f57190fe88262ae698f6fa3philippe           ur &= 0xFFFF000000000000ULL;
589132b4a4264d671d072f57190fe88262ae698f6fa3philippe
589252675269f43c06380b04bf502c509cca4ee643b6cerion      if (zap_hi_32bits)
589363b52cfe3df319eac28ad8c8b40adde62079e07fsewardj         ur &= 0x00000000FFFFFFFFULL;
589463b52cfe3df319eac28ad8c8b40adde62079e07fsewardj      if (zap_lo_44bits)
589563b52cfe3df319eac28ad8c8b40adde62079e07fsewardj         ur &= 0xFFFFF00000000000ULL;
589663b52cfe3df319eac28ad8c8b40adde62079e07fsewardj      if (zap_lo_47bits)
589763b52cfe3df319eac28ad8c8b40adde62079e07fsewardj         ur &= 0xFFFF800000000000ULL;
5898586fb038935723146cb6950b38911aeb9fc12765cerion
5899a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
5900b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %016llx => %016llx",
5901a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
59022762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx => %016llx",
5903a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
5904b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, u0, ur);
5905586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS
5906b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf(" (%08x)", flags);
5907586fb038935723146cb6950b38911aeb9fc12765cerion#endif
5908b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("\n");
5909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    }
5910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Special test cases for:
5913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mffs
5914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtfsb0
5915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtfsb1
5916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
5917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_float_ops[] = {
5918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
5919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mffs",   /* One 5 bits immediate argument */
5921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mffs.",   /* One 5 bits immediate argument */
5925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb0", /* One 5 bits immediate argument */
5929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb0.", /* One 5 bits immediate argument */
5933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb1", /* One 5 bits immediate argument */
5937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb1.", /* One 5 bits immediate argument */
5941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsf",  /* One register + 1 8 bits immediate argument */
5945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsf_cb,
5946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsf.",  /* One register + 1 8 bits immediate argument */
5949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsf_cb,
5950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsfi", /* One 5 bits argument + 1 5 bits argument */
5953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsfi_cb,
5954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsfi.", /* One 5 bits argument + 1 5 bits argument */
5957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsfi_cb,
5958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
5962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
5963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5966530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_special (const char* name, test_func_t func,
5967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                uint32_t test_flags)
5968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_special(special_float_ops, name, func, test_flags);
5970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5972c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5973c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_ld_one_reg_imm16 (const char* name,
59747c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                                         test_func_t func_IN,
5975c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                         unused uint32_t test_flags)
5976c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
59777c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
59787c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
5979dd690bf8d81c9119a7228446be12e3366e202176carll   HWord_t base;
59805f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
5981c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   volatile double src, res;
5982dd690bf8d81c9119a7228446be12e3366e202176carll   int i;
5983dd690bf8d81c9119a7228446be12e3366e202176carll   uint16_t offs;
5984c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
5985c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* offset within [1-nb_fargs:nb_fargs] */
5986c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   for (i=1-nb_fargs; i<nb_fargs; i++) {
5987c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      offs = i * 8;      // offset = i * sizeof(double)
5988c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      if (i < 0) {
5989c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src  = fargs[nb_fargs-1 + i];
599052675269f43c06380b04bf502c509cca4ee643b6cerion         base = (HWord_t)&fargs[nb_fargs-1];
5991c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      } else {
5992c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src = fargs[i];
599352675269f43c06380b04bf502c509cca4ee643b6cerion         base = (HWord_t)&fargs[0];
5994c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      }
5995c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
599652675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
59977c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func_IN, func_buf );
599852675269f43c06380b04bf502c509cca4ee643b6cerion      patch_op_imm16(&func_buf[0], offs);
5999c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6000c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      // load from fargs[idx] => r14 + offs
6001c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      r14 = base;
6002c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
60035f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
6004c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      (*func)();
60055f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
6006c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      res = f17;
6007c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6008a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
6009b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %016llx, %4d => %016llx, %4d",
6010a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
60112762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %4d => %016llx, %4lld",
6012a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
6013c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             name, double_to_bits(src), offs,
6014b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             double_to_bits(res), r14-base);
6015b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#if defined TEST_FLOAT_FLAGS
6016b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf(" (%08x %08x)", flags, xer);
6017586fb038935723146cb6950b38911aeb9fc12765cerion#endif
6018b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("\n");
6019c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   }
6020c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   if (verbose) printf("\n");
6021c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
6022c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6023c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_ld_two_regs (const char* name,
6024c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                    test_func_t func,
6025c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                    unused uint32_t test_flags)
6026c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
602752675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t base;
60285f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
6029c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   volatile double src, res;
6030b8efd2a1d18b2e2293527db3c8262f196008ffbecerion   int i, offs;
6031dd690bf8d81c9119a7228446be12e3366e202176carll
6032c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   /* offset within [1-nb_fargs:nb_fargs] */
6033c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   for (i=1-nb_fargs; i<nb_fargs; i++) {
6034b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      offs = i * 8;                // offset = i * sizeof(double)
6035c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      if (i < 0) {                 // base reg = start of array
6036c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src  = fargs[nb_fargs-1 + i];
603752675269f43c06380b04bf502c509cca4ee643b6cerion         base = (HWord_t)&fargs[nb_fargs-1];
6038c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      } else {
6039c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src  = fargs[i];
604052675269f43c06380b04bf502c509cca4ee643b6cerion         base = (HWord_t)&fargs[0];
6041c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      }
6042c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6043c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      r14 = base;
6044b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      r15 = offs;
6045c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
60465f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
6047c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      (*func)();
60485f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
6049c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      res = f17;
6050c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6051a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
6052b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %016llx, %4d => %016llx, %4d",
6053a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
60542762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %4lld => %016llx, %4lld",
6055a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
6056b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, double_to_bits(src), r15/*offs*/,
6057b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             double_to_bits(res), r14-base);
6058586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS
6059b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf(" (%08x %08x)", flags, xer);
6060586fb038935723146cb6950b38911aeb9fc12765cerion#endif
6061b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("\n");
6062c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   }
6063c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
6064c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6065c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_st_two_regs_imm16 (const char* name,
60667c01859c190613f313f57fc4b1c6bb14124b00c7sewardj                                          test_func_t func_IN,
6067c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                          unused uint32_t test_flags)
6068c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
60697c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
60707c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
607152675269f43c06380b04bf502c509cca4ee643b6cerion   HWord_t base;
60725f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
6073c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   double src, *p_dst;
6074c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   int i, offs;
6075c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   double *fargs_priv;
6076586fb038935723146cb6950b38911aeb9fc12765cerion   int nb_tmp_fargs = nb_fargs;
6077586fb038935723146cb6950b38911aeb9fc12765cerion
607852675269f43c06380b04bf502c509cca4ee643b6cerion
6079586fb038935723146cb6950b38911aeb9fc12765cerion   /* if we're storing an fp single-precision, don't want nans
6080586fb038935723146cb6950b38911aeb9fc12765cerion      - the vex implementation doesn't like them (yet)
6081586fb038935723146cb6950b38911aeb9fc12765cerion      Note: This is actually a bigger problem: the vex implementation
6082586fb038935723146cb6950b38911aeb9fc12765cerion      rounds these insns twice.  This leads to many rounding errors.
6083586fb038935723146cb6950b38911aeb9fc12765cerion      For the small fargs set, however, this doesn't show up.
6084586fb038935723146cb6950b38911aeb9fc12765cerion   */
608552675269f43c06380b04bf502c509cca4ee643b6cerion   if (strstr(name, "stfs") != NULL)
6086586fb038935723146cb6950b38911aeb9fc12765cerion      nb_tmp_fargs = nb_normal_fargs;
6087586fb038935723146cb6950b38911aeb9fc12765cerion
6088586fb038935723146cb6950b38911aeb9fc12765cerion
6089c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   // private fargs table to store to
6090586fb038935723146cb6950b38911aeb9fc12765cerion   fargs_priv = malloc(nb_tmp_fargs * sizeof(double));
6091c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6092586fb038935723146cb6950b38911aeb9fc12765cerion   /* offset within [1-nb_tmp_fargs:nb_tmp_fargs] */
6093586fb038935723146cb6950b38911aeb9fc12765cerion   for (i=1-nb_tmp_fargs; i<nb_tmp_fargs; i++) {
6094c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      offs = i * 8;    // offset = i * sizeof(double)
6095c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      if (i < 0) {
6096586fb038935723146cb6950b38911aeb9fc12765cerion         src   =  fargs     [nb_tmp_fargs-1 + i];
6097586fb038935723146cb6950b38911aeb9fc12765cerion         p_dst = &fargs_priv[nb_tmp_fargs-1 + i];
609852675269f43c06380b04bf502c509cca4ee643b6cerion         base  = (HWord_t)&fargs_priv[nb_tmp_fargs-1];
6099c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      } else {
6100c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src   =  fargs     [i];
6101c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         p_dst = &fargs_priv[i];
610252675269f43c06380b04bf502c509cca4ee643b6cerion         base  = (HWord_t)&fargs_priv[0];
6103c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      }
6104c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      *p_dst = 0;  // clear dst
6105c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
610652675269f43c06380b04bf502c509cca4ee643b6cerion      /* Patch up the instruction */
61077c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func_IN, func_buf );
610852675269f43c06380b04bf502c509cca4ee643b6cerion      patch_op_imm16(&func_buf[0], offs);
6109c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6110c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      // read from fargs[idx] => f14
6111c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      // store to fargs_priv[idx] => r15 + offs
6112c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      f14 = src;
6113c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      r15 = base;
6114c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
61155f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
6116c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      (*func)();
61175f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
6118c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6119a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
6120b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %016llx, %4d => %016llx, %4d",
6121a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
61222762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %4d => %016llx, %4lld",
6123a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
6124c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             name, double_to_bits(src), offs,
6125b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             double_to_bits(*p_dst), r15-base);
6126b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#if defined TEST_FLOAT_FLAGS
6127b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf(" (%08x %08x)", flags, xer);
6128586fb038935723146cb6950b38911aeb9fc12765cerion#endif
6129b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("\n");
6130c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   }
6131c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   free(fargs_priv);
6132c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
6133c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6134c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_st_three_regs (const char* name,
6135c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                      test_func_t func,
6136c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion                                      unused uint32_t test_flags)
6137c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{
613852675269f43c06380b04bf502c509cca4ee643b6cerion   volatile HWord_t base;
61395f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj   volatile uint32_t flags, xer;
6140c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   double src, *p_dst;
6141c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   int i, offs;
6142c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   double *fargs_priv;
6143586fb038935723146cb6950b38911aeb9fc12765cerion   int nb_tmp_fargs = nb_fargs;
6144586fb038935723146cb6950b38911aeb9fc12765cerion
6145b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6146586fb038935723146cb6950b38911aeb9fc12765cerion   /* if we're storing an fp single-precision, don't want nans
6147586fb038935723146cb6950b38911aeb9fc12765cerion      - the vex implementation doesn't like them (yet)
6148586fb038935723146cb6950b38911aeb9fc12765cerion      Note: This is actually a bigger problem: the vex implementation
6149586fb038935723146cb6950b38911aeb9fc12765cerion      rounds these insns twice.  This leads to many rounding errors.
6150586fb038935723146cb6950b38911aeb9fc12765cerion      For the small fargs set, however, this doesn't show up.
6151586fb038935723146cb6950b38911aeb9fc12765cerion   */
615252675269f43c06380b04bf502c509cca4ee643b6cerion   if (strstr(name, "stfs") != NULL)  // stfs(u)(x)
6153586fb038935723146cb6950b38911aeb9fc12765cerion      nb_tmp_fargs = nb_normal_fargs;
6154586fb038935723146cb6950b38911aeb9fc12765cerion
6155c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6156c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   // private fargs table to store to
6157586fb038935723146cb6950b38911aeb9fc12765cerion   fargs_priv = malloc(nb_tmp_fargs * sizeof(double));
6158c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6159586fb038935723146cb6950b38911aeb9fc12765cerion   //   /* offset within [1-nb_tmp_fargs:nb_tmp_fargs] */
6160586fb038935723146cb6950b38911aeb9fc12765cerion   //   for (i=1-nb_tmp_fargs; i<nb_tmp_fargs; i++) {
6161586fb038935723146cb6950b38911aeb9fc12765cerion   for (i=0; i<nb_tmp_fargs; i++) {
6162c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      offs = i * 8;    // offset = i * sizeof(double)
6163c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      if (i < 0) {
6164586fb038935723146cb6950b38911aeb9fc12765cerion         src   =  fargs     [nb_tmp_fargs-1 + i];
6165586fb038935723146cb6950b38911aeb9fc12765cerion         p_dst = &fargs_priv[nb_tmp_fargs-1 + i];
616652675269f43c06380b04bf502c509cca4ee643b6cerion         base  = (HWord_t)&fargs_priv[nb_tmp_fargs-1];
6167c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      } else {
6168c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         src   =  fargs     [i];
6169c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion         p_dst = &fargs_priv[i];
617052675269f43c06380b04bf502c509cca4ee643b6cerion         base  = (HWord_t)&fargs_priv[0];
6171c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      }
6172c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      *p_dst = 0;  // clear dst
6173c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6174c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      f14  = src;    // read from fargs
6175c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      r15  = base;   // store to r15 + offs
6176c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      r16  = offs;
6177c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
61785f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      SET_CR_XER_ZERO;
6179c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      (*func)();
61805f2d97bcb4eddb73852d231e3940dee16f09e8c4sewardj      GET_CR_XER(flags,xer);
6181c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6182a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
6183b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s %016llx, %4d => %016llx, %4d",
6184a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
61852762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx, %4lld => %016llx, %4lld",
6186a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
6187b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             name, double_to_bits(src), r16/*offs*/,
6188b8efd2a1d18b2e2293527db3c8262f196008ffbecerion             double_to_bits(*p_dst), r15-base);
6189586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS
6190b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf(" (%08x %08x)", flags, xer);
6191586fb038935723146cb6950b38911aeb9fc12765cerion#endif
6192b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("\n");
6193586fb038935723146cb6950b38911aeb9fc12765cerion
6194586fb038935723146cb6950b38911aeb9fc12765cerion
6195586fb038935723146cb6950b38911aeb9fc12765cerion#if 0
6196586fb038935723146cb6950b38911aeb9fc12765cerion      // print double precision result
6197a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
6198c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      printf("%s %016llx (%014e), %4d => %016llx (%014e), %08x (%08x %08x)\n",
6199a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
62002762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx (%014e), %4d => %016llx (%014e), %08x (%08x %08x)\n",
6201a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
6202c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             name, double_to_bits(src), src, offs,
6203c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             double_to_bits(*p_dst), *p_dst, r15, flags, xer);
6204586fb038935723146cb6950b38911aeb9fc12765cerion
6205c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      // print single precision result
6206a2a583876ee4197d0284960aeb594dc75bce2f09cerion#ifndef __powerpc64__
6207c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion      printf("%s %016llx (%014e), %4d => %08x (%f), %08x (%08x %08x)\n",
6208a2a583876ee4197d0284960aeb594dc75bce2f09cerion#else
62092762a738523d6f37cab30c4b1fae6a30414a81f6sewardj      printf("%s %016llx (%014e), %4d => %08x (%f), %08x (%08x %08x)\n",
6210a2a583876ee4197d0284960aeb594dc75bce2f09cerion#endif
6211c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             name, double_to_bits(src), src, offs,
6212c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             (uint32_t)(double_to_bits(*p_dst) >> 32),
6213c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             bits_to_float( (uint32_t)(double_to_bits(*p_dst) >> 32) ),
6214c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion             r15, flags, xer);
6215c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif
6216c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   }
6217c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   free(fargs_priv);
6218c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}
6219c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6220c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion
6221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
6222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
6223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
6224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t float_loops[] = {
6225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_one_arg,
6226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_two_args,
6227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_three_args,
6228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_two_args,
6229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_special,
6232c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   &test_float_ld_one_reg_imm16,
6233c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   &test_float_ld_two_regs,
6234c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   &test_float_st_two_regs_imm16,
6235c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion   &test_float_st_three_regs,
6236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
6237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
6238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6240f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
6241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Ref: vector insns to test setting CR, VSCR:
6243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         volatile vector unsigned int v1 =
6244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            //            (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF };
6245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (vector unsigned int){ 0x80808080,0x80808080,0x80808080,0x80808080 };
6246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         volatile vector unsigned int v2 =
6247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            //            (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF };
6248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (vector unsigned int){ 0x01010101,0x01010101,0x01010101,0x01010101 };
62499f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         //__asm__ __volatile__ ("vcmpequw. 31,%0,%1" : : "v" (v1), "v" (v2));   // sets CR[6]
62509f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         //__asm__ __volatile__ ("vpkswss 31,%0,%1" : : "v" (v1), "v" (v2));     // sets VSCR[SAT]
62519f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vsubsbs 31,%0,%1" : : "v" (v1), "v" (v2));       // sets VSCR[SAT]
6252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
6253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
62541b6b2b3e62549edc02744bbc149c74bcc043835ecerion//#define DEFAULT_VSCR 0x00010000
62551b6b2b3e62549edc02744bbc149c74bcc043835ecerion#define DEFAULT_VSCR 0x0
6256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6257530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_one_arg (const char* name, test_func_t func,
6258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 unused uint32_t test_flags)
6259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6262f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in, vec_out, vscr;
6263f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src, *dst;
6264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
6265f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6266f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6267f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
6271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6274f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in  = (vector unsigned int)viargs[i];
6275f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_out = (vector unsigned int){ 0,0,0,0 };
6276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // reset VSCR and CR
6278f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = 0;
62809f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // load input -> r14
62849f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in));
6285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // do stuff
6287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
6288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // retrieve output <- r17
6290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // get CR,VSCR flags
6293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
6297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
62989f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6300f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      src = (unsigned int*)&vec_in;
6301f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      dst = (unsigned int*)&vec_out;
6302b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s: %08x %08x %08x %08x\n", name,
6304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             src[0], src[1], src[2], src[3]);
6305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s:  => %08x %08x %08x %08x ", name,
6306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             dst[0], dst[1], dst[2], dst[3]);
6307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6308f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      p_vscr = (unsigned int*)&vscr;
6309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x, %08x)\n", flags, p_vscr[3]);
6310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x)\n", flags);
6312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6316530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_two_args (const char* name, test_func_t func,
6317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  unused uint32_t test_flags)
6318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6321f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in1, vec_in2, vec_out, vscr;
6322f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *dst;
6323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
6324f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6325f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6326f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6329f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in1 = (vector unsigned int)viargs[i];
6330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_viargs; j++) {
6331f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in2 = (vector unsigned int)viargs[j];
6332f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector unsigned int){ 0,0,0,0 };
6333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
6335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
6339f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
63419f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load inputs -> r14,r15
63459f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
63469f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2));
6347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
6349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
6350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
6352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
6355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
6359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
63609f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6362f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src1 = (unsigned int*)&vec_in1;
6363f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src2 = (unsigned int*)&vec_in2;
6364f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst  = (unsigned int*)&vec_out;
6365b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: ", name);
6367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]);
6368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]);
6369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
6370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
6371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6372f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         p_vscr = (unsigned int*)&vscr;
6373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x, %08x)\n", flags, p_vscr[3]);
6374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x)\n", flags);
6376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
6379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6382530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_three_args (const char* name, test_func_t func,
6383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
6384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6387f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in1, vec_in2, vec_in3, vec_out, vscr;
6388f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *src3, *dst;
6389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j,k;
6390f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6391f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6392f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6395f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in1 = (vector unsigned int)viargs[i];
6396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_viargs; j++) {
6397f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in2 = (vector unsigned int)viargs[j];
6398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_viargs; k++) {
6399f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_in3 = (vector unsigned int)viargs[k];
6400f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_out = (vector unsigned int){ 0,0,0,0 };
6401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
6403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // reset VSCR and CR
6407f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = 0;
64099f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // load inputs -> r14,r15,r16
64139f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
64149f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2));
64159f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 16,%0,%0" : : "v" (vec_in3));
6416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // do stuff
6418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
6419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // retrieve output <- r17
6421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // get CR,VSCR flags
6424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
6428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
64299f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6431f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src1 = (unsigned int*)&vec_in1;
6432f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src2 = (unsigned int*)&vec_in2;
6433f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src3 = (unsigned int*)&vec_in3;
6434f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            dst  = (unsigned int*)&vec_out;
6435b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
6437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src1[0], src1[1], src1[2], src1[3],
6438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src2[0], src2[1], src2[2], src2[3],
6439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src3[0], src3[1], src3[2], src3[3]);
6440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s:  => %08x%08x%08x%08x ", name,
6442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   dst[0], dst[1], dst[2], dst[3]);
6443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6444f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            p_vscr = (unsigned int*)&vscr;
6445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x, %08x)\n", flags, p_vscr[3]);
6446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x)\n", flags);
6448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
6450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
6451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6456530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vs128_cb (const char* name, test_func_t func,
6457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
6458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6461f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned char vec_shft;
6462f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in1, vec_out, vscr;
6463f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *dst;
6464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
6465f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6466f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6467f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6470f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in1 = (vector unsigned int)viargs[i];
6471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<8; j++) {
6472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* low-order 3bits of every byte must be the same for the shift vector */
6473f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_shft = (vector unsigned char) { j,j,j,j, j,j,j,j, j,j,j,j, j,j,j,j };
6474f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out  = (vector unsigned int){ 0,0,0,0 };
6475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
6477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
6481f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
64839f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load inputs -> r14,r15
64879f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
64889f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_shft));
6489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
6491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
6492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
6494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
6497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
6501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
65029f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6504f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src1 = (unsigned int*)&vec_in1;
6505f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src2 = (unsigned int*)&vec_shft;
6506f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst  = (unsigned int*)&vec_out;
6507b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: ", name);
6509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]);
6510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]);
6511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
6513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
6514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6515f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         p_vscr = (unsigned int*)&vscr;
6516f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         printf("(%08x, %08x)\n", flags, p_vscr[3]);
6517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6518f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         printf("(%08x)\n", flags);
6519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
6522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
65257c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void vsplt_cb (const char* name, test_func_t func_IN,
6526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
6527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
65287c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
65297c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
6530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6532f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in1, vec_out, vscr;
6533f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *dst;
6534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
6535f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6536f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6537f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6540f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in1 = (vector unsigned int)viargs[i];
6541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<16; j+=3) {
6543f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector unsigned int){ 0,0,0,0 };
6544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Patch up the instruction */
65467c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
654752675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm(&func_buf[0], j, 16, 5);
654852675269f43c06380b04bf502c509cca4ee643b6cerion
6549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
6550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
6554f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
65569f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load input -> r14
65609f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
6561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
6563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
6564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
6566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
6569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
6573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
65749f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6576f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src1 = (unsigned int*)&vec_in1;
6577f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst  = (unsigned int*)&vec_out;
6578b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: ", name);
6580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x %08x %08x %08x, %u\n", src1[0], src1[1], src1[2], src1[3], j);
6581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
6583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
6584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6585f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         p_vscr = (unsigned int*)&vscr;
6586f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         printf("(%08x, %08x)\n", flags, p_vscr[3]);
6587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6588f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         printf("(%08x)\n", flags);
6589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
6592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
65957c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void vspltis_cb (const char* name, test_func_t func_IN,
6596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
6597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
65987c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
65997c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
6600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6602f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_out, vscr;
6603f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *dst;
6604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
6605f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6606f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6607f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<32; i++) {
6610f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_out = (vector unsigned int){ 0,0,0,0 };
6611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Patch up the instruction */
66137c01859c190613f313f57fc4b1c6bb14124b00c7sewardj      func = init_function( func_IN, func_buf );
661452675269f43c06380b04bf502c509cca4ee643b6cerion      patch_op_imm(&func_buf[0], i, 16, 5);
6615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
6617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // reset VSCR and CR
6621f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = 0;
66239f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // do stuff
6627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
6628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // retrieve output <- r17
6630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // get CR,VSCR flags
6633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
6637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
66389f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6640f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      dst = (unsigned int*)&vec_out;
6641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6642b8efd2a1d18b2e2293527db3c8262f196008ffbecerion      printf("%s: %2d => ", name, i);
6643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
6644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6645f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      p_vscr = (unsigned int*)&vscr;
6646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x, %08x)\n", flags, p_vscr[3]);
6647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x)\n", flags);
6649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
66537c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void vsldoi_cb (const char* name, test_func_t func_IN,
6654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                       unused uint32_t test_flags)
6655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
66567c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
66577c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
6658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6660f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in1, vec_in2, vec_out, vscr;
6661f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *dst;
6662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j,k;
6663f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6664f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6665f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
6666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
6668f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in1 = (vector unsigned int)viargs[i];
6669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_viargs; j++) {
6670f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in2 = (vector unsigned int)viargs[j];
6671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<16; k+=14) {
6672f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_out = (vector unsigned int){ 0,0,0,0 };
6673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Patch up the instruction */
66757c01859c190613f313f57fc4b1c6bb14124b00c7sewardj            func = init_function( func_IN, func_buf );
667652675269f43c06380b04bf502c509cca4ee643b6cerion            patch_op_imm(&func_buf[0], k, 6, 4);
6677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
6679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // reset VSCR and CR
6683f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
6684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = 0;
66859f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
6686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // load inputs -> r14,r15
66899f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
66909f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2));
6691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // do stuff
6693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
6694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // retrieve output <- r17
6696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // get CR,VSCR flags
6699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
6703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
67049f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
6705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6706f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src1   = (unsigned int*)&vec_in1;
6707f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src2   = (unsigned int*)&vec_in2;
6708f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            dst    = (unsigned int*)&vec_out;
6709b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s: ", name);
6711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%08x%08x%08x%08x, %08x%08x%08x%08x, %u\n",
6712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src1[0], src1[1], src1[2], src1[3],
6713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src2[0], src2[1], src2[2], src2[3], k);
6714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s:  => %08x %08x %08x %08x] ", name,
6716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   dst[0], dst[1], dst[2], dst[3]);
6717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6718f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            p_vscr = (unsigned int*)&vscr;
6719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x, %08x)\n", flags, p_vscr[3]);
6720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x)\n", flags);
6722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
6724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
6725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
672905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion/* lvsl, lvsr */
673005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void lvs_cb (const char *name, test_func_t func,
673105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                    unused uint32_t test_flags)
673205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
673305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile uint32_t flags, tmpcr;
673405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile vector unsigned int tmpvscr;
6735f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_out, vscr;
6736dd690bf8d81c9119a7228446be12e3366e202176carll   unsigned shift;
6737dd690bf8d81c9119a7228446be12e3366e202176carll   unsigned char * dst;
6738dd690bf8d81c9119a7228446be12e3366e202176carll   int i, j;
6739f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
6740f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
6741f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
674205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
674305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=-1; i<17; i++) {
6744f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_out = (vector unsigned int){ 0,0,0,0 };
674505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
674605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // make sure start address is 16 aligned - use viargs[0]
6747dd690bf8d81c9119a7228446be12e3366e202176carll      HWord_t * r15_in_ptr = (HWord_t *)&viargs[0];
6748dd690bf8d81c9119a7228446be12e3366e202176carll      r15 = *r15_in_ptr;
674905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      r14 = i;
675005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
675105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      /* Save flags */
675205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
675305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
675405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
675505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // reset VSCR and CR
6756f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
675705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      flags = 0;
67589f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
675905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
676005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
676105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // do stuff
676205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      (*func)();
676305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
676405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // retrieve output <- r17
676505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
676605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
676705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // get CR,VSCR flags
676805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
676905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
677005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
677105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      /* Restore flags */
677205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
67739f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
677405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
6775dd690bf8d81c9119a7228446be12e3366e202176carll      dst = (unsigned char*)&vec_out;
6776dd690bf8d81c9119a7228446be12e3366e202176carll
6777dd690bf8d81c9119a7228446be12e3366e202176carll      shift = ((unsigned int)i + *r15_in_ptr) & 0xf;
6778dd690bf8d81c9119a7228446be12e3366e202176carll      printf("%s %x, %3d", name, shift, 0);
6779dd690bf8d81c9119a7228446be12e3366e202176carll      printf(" => 0x");
6780dd690bf8d81c9119a7228446be12e3366e202176carll      for (j = 0; j < 16; j++) {
6781dd690bf8d81c9119a7228446be12e3366e202176carll         printf("%02x", dst[j]);
6782dd690bf8d81c9119a7228446be12e3366e202176carll         if (j == 7)
6783dd690bf8d81c9119a7228446be12e3366e202176carll            printf(" 0x");
6784dd690bf8d81c9119a7228446be12e3366e202176carll      }
6785b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
6786dd690bf8d81c9119a7228446be12e3366e202176carll      printf(" (%08x)\n", flags);
678705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
678805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   if (verbose) printf("\n");
678905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
679005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
6791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_av_int_ops[] = {
6792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsr", /* Two registers arguments */
6794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vs128_cb,
6795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsl", /* Two registers arguments */
6798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vs128_cb,
6799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltb", /* One reg, one 5-bit uimm arguments */
6802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsplt_cb,
6803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsplth", /* One reg, one 5-bit uimm arguments */
6806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsplt_cb,
6807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltw", /* One reg, one 5-bit uimm arguments */
6810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsplt_cb,
6811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltisb", /* One reg, one 5-bit uimm arguments */
6814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vspltis_cb,
6815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltish", /* One reg, one 5-bit uimm arguments */
6818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vspltis_cb,
6819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltisw", /* One reg, one 5-bit uimm arguments */
6822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vspltis_cb,
6823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
6824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
6825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsldoi", /* Two regs, one 4-bit uimm arguments */
6826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsldoi_cb,
6827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
682805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   {
682905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      "lvsl", /* Two regs */
683005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      &lvs_cb,
683105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   },
683205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   {
683305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      "lvsr", /* Two regs */
683405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      &lvs_cb,
683505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   },
683605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   {
683705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      NULL,
683805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      NULL,
683905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   },
6840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
6841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6842530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_special (const char* name, test_func_t func,
6843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 uint32_t test_flags)
6844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_special(special_av_int_ops, name, func, test_flags);
6846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
684805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_av_int_ld_two_regs (const char *name,
684905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                  test_func_t func,
685005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                  unused uint32_t test_flags)
685105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
685205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile uint32_t flags, tmpcr;
685305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile vector unsigned int tmpvscr;
6854f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in, vec_out, vscr;
6855f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src, *dst;
685681aab3c751b11fcfa6629b449c92bd7e3f459567sewardj   int i,j, k, do_mask;
685781aab3c751b11fcfa6629b449c92bd7e3f459567sewardj
685881aab3c751b11fcfa6629b449c92bd7e3f459567sewardj   do_mask = 0;
685952675269f43c06380b04bf502c509cca4ee643b6cerion   if (strstr(name, "lvebx") != NULL) do_mask = 1;
686052675269f43c06380b04bf502c509cca4ee643b6cerion   if (strstr(name, "lvehx") != NULL) do_mask = 2;
686152675269f43c06380b04bf502c509cca4ee643b6cerion   if (strstr(name, "lvewx") != NULL) do_mask = 4;
686205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
686305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=0; i<nb_viargs; i++) {
686405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      for (j=0; j<16; j+=7) {
6865f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector unsigned int){ 0,0,0,0 };
686605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
686705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // load from viargs array + some dis-alignment
686852675269f43c06380b04bf502c509cca4ee643b6cerion         r15 = (HWord_t)&viargs[0];
686905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         r14 = i*16 + j;
687005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
687105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Save flags */
687205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
687305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
687405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
687505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // reset VSCR and CR
6876f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
687705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         flags = 0;
68789f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
687905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
688081aab3c751b11fcfa6629b449c92bd7e3f459567sewardj
688105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // do stuff
688205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         (*func)();
688305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
688405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // retrieve output <- r17
688505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
688605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
688705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // get CR,VSCR flags
688805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
688905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
689005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
689105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Restore flags */
689205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
68939f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
689405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
6895f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in = (vector unsigned int)viargs[i];
6896f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src = (unsigned int*)&vec_in;
6897f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst = (unsigned int*)&vec_out;
689881aab3c751b11fcfa6629b449c92bd7e3f459567sewardj
689981aab3c751b11fcfa6629b449c92bd7e3f459567sewardj         /* For lvebx/lvehx/lvewx, as per the documentation, all of
690081aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            the dest reg except the loaded bits are undefined
690181aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            afterwards.  And different CPUs really do produce
690281aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            different results.  So mask out bits of the result that
690381aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            are undefined so as to make the test work reliably. */
690481aab3c751b11fcfa6629b449c92bd7e3f459567sewardj         if (do_mask == 1) {
690581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            char* p = (char*)dst;
690681aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            for (k = 0; k < 16; k++)
690781aab3c751b11fcfa6629b449c92bd7e3f459567sewardj               if (k != j)
690881aab3c751b11fcfa6629b449c92bd7e3f459567sewardj                  p[k] = (char)0;
6909f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         }
691081aab3c751b11fcfa6629b449c92bd7e3f459567sewardj         if (do_mask == 2) {
691181aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            short* p = (short*)dst;
691281aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            for (k = 0; k < 8; k++)
691381aab3c751b11fcfa6629b449c92bd7e3f459567sewardj               if (k != (j>>1))
691481aab3c751b11fcfa6629b449c92bd7e3f459567sewardj                  p[k] = (short)0;
6915f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         }
691681aab3c751b11fcfa6629b449c92bd7e3f459567sewardj         if (do_mask == 4) {
691781aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            int* p = (int*)dst;
691881aab3c751b11fcfa6629b449c92bd7e3f459567sewardj            for (k = 0; k < 4; k++)
691981aab3c751b11fcfa6629b449c92bd7e3f459567sewardj               if (k != (j>>2))
692081aab3c751b11fcfa6629b449c92bd7e3f459567sewardj                  p[k] = (int)0;
6921f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         }
692281aab3c751b11fcfa6629b449c92bd7e3f459567sewardj
692305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]);
692405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
692505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("(%08x)\n", flags);
692605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
692705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      if (verbose) printf("\n");
692805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
692905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
693005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
693105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
693205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_av_int_st_three_regs (const char *name,
693305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                       test_func_t func,
693405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                       unused uint32_t test_flags)
693505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
693605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile uint32_t flags, tmpcr;
693705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile vector unsigned int tmpvscr;
6938f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in, vec_out, vscr;
6939f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src, *dst;
694005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   int i,j;
694105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   vector unsigned int* viargs_priv;
694205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
694305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   // private viargs table to store to
694483b62cbbab29bde83eba40231f307c2a311e73c8njn   viargs_priv = memalign16(nb_viargs * sizeof(vector unsigned int));
694505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=0; i<nb_viargs; i++)
694605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      viargs_priv[i] = (vector unsigned int) { 0,0,0,0 };
694705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
694805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=0; i<nb_viargs; i++) {
694905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      for (j=0; j<16; j+=7) {
695005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // read from viargs
6951f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in = (vector unsigned int)viargs[i];
695205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
695305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // store to viargs_priv[0] + some dis-alignment
695452675269f43c06380b04bf502c509cca4ee643b6cerion         r16 = (HWord_t)&viargs_priv[0];
695505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         r15 = i*16 + j;
695605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
695705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Save flags */
695805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
695905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
696005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
696105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // reset VSCR and CR
6962f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
696305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         flags = 0;
69649f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
696505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
696605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
696705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // load inputs -> r14
69689f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in));
696905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
697005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // do stuff
697105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         (*func)();
697205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
697305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // Output stored in viargs_priv
697405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
697505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // get CR,VSCR flags
697605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
697705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
697805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
697905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Restore flags */
698005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
69819f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
698205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
6983f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector unsigned int)viargs_priv[i];
6984f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src = (unsigned int*)&vec_in;
6985f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst = (unsigned int*)&vec_out;
6986b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
698705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]);
698805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
698905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("(%08x)\n", flags);
699005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
699105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      if (verbose) printf("\n");
699205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
699305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
699405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
6995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
6996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
6997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
6998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t altivec_int_loops[] = {
6999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_one_arg,
7000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_two_args,
7001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_three_args,
7002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_two_args,
7003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_special,
7006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
700705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   &test_av_int_ld_two_regs,
7008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
700905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   test_av_int_st_three_regs,
7010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
7011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7013530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_one_arg (const char* name, test_func_t func,
7014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                   unused uint32_t test_flags)
7015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
7017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
7018f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector float vec_in, vec_out;
7019f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vscr;
7020f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src, *dst;
7021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
7022f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
7023f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
7024f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
7025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7026e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj   /* if we're doing an estimation operation, arrange to zap the
702732b4a4264d671d072f57190fe88262ae698f6fa3philippe      bottom 10-bits of the result as it's basically garbage, and differs
7028e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj      between cpus */
7029e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj   unsigned int mask
703052675269f43c06380b04bf502c509cca4ee643b6cerion      = (strstr(name,"vrsqrtefp") != NULL ||
703152675269f43c06380b04bf502c509cca4ee643b6cerion         strstr(name,    "vrefp") != NULL)
703232b4a4264d671d072f57190fe88262ae698f6fa3philippe           ? 0xFFFFC000 : 0xFFFFFFFF;
7033e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj
7034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
7035f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in  = (vector float)vfargs[i];
7036f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
7037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
7039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
7040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
7041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // reset VSCR and CR
7043f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
7044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = 0;
70459f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
7046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
7047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // load input -> r14
70499f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in));
7050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // do stuff
7052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
7053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // retrieve output <- r17
7055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
7056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // get CR,VSCR flags
7058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
7059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
7060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
7062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
70639f4e472e71cf49860745eaf439a021f00ddc2c7csewardj      __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
7064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7065f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      src = (unsigned int*)&vec_in;
7066f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      dst = (unsigned int*)&vec_out;
7067b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s: %08x %08x %08x %08x\n", name,
7069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             src[0], src[1], src[2], src[3]);
7070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s:  => %08x %08x %08x %08x ", name,
7071e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj             dst[0] & mask, dst[1] & mask, dst[2] & mask, dst[3] & mask);
7072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
7073f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      p_vscr = (unsigned int*)&vscr;
7074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x, %08x)\n", flags, p_vscr[3]);
7075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x)\n", flags);
7077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7081530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_two_args (const char* name, test_func_t func,
7082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
7083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
7085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
7086f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector float vec_in1, vec_in2, vec_out;
7087f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vscr;
7088f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *dst;
7089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
7090f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
7091f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
7092f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
7093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
7095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_vfargs; j+=3) {
7096f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in1 = (vector float)vfargs[i];
7097f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_in2 = (vector float)vfargs[j];
7098f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
7099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
7101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
7102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
7103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
7105f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
7106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
71079f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
7108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
7109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load inputs -> r14,r15
71119f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
71129f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2));
7113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
7115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
7116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
7118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
7119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
7121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
7122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
7123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
7125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
71269f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
7127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7128f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src1 = (unsigned int*)&vec_in1;
7129f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src2 = (unsigned int*)&vec_in2;
7130f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst  = (unsigned int*)&vec_out;
7131b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
7133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                src1[0], src1[1], src1[2], src1[3],
7134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                src2[0], src2[1], src2[2], src2[3]);
7135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
7136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
7137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
7138f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         p_vscr = (unsigned int*)&vscr;
7139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x, %08x)\n", flags, p_vscr[3]);
7140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x)\n", flags);
7142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
7145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7148530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_three_args (const char* name, test_func_t func,
7149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                      unused uint32_t test_flags)
7150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
7152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
7153f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector float vec_in1, vec_in2, vec_in3, vec_out;
7154f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vscr;
7155f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src1, *src2, *src3, *dst;
7156b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe   int i,j,k,n;
7157f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
7158f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
7159f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
7160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
7162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_vfargs; j+=3) {
7163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_vfargs; k+=5) {
7164f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_in1 = (vector float)vfargs[i];
7165f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_in2 = (vector float)vfargs[j];
7166f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_in3 = (vector float)vfargs[k];
7167f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
7168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
7170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
7171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
7172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // reset VSCR and CR
7174f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
7175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = 0;
71769f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
7177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
7178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // load inputs -> r14,r15,r16
71809f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1));
71819f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2));
71829f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("vor 16,%0,%0" : : "v" (vec_in3));
7183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // do stuff
7185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
7186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // retrieve output <- r17
7188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
7189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // get CR,VSCR flags
7191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
7192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
7193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
7195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
71969f4e472e71cf49860745eaf439a021f00ddc2c7csewardj            __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
7197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7198f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src1 = (unsigned int*)&vec_in1;
7199f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src2 = (unsigned int*)&vec_in2;
7200f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            src3 = (unsigned int*)&vec_in3;
7201f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            dst  = (unsigned int*)&vec_out;
7202b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7203b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe            /* Valgrind emulation for vmaddfp and vnmsubfp generates negative
7204b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             * NAN.  Technically, NAN is not positive or negative so mask off
7205b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             * the sign bit to eliminate false errors.
7206b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             *
7207b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             * Valgrind emulation is creating negative zero.  Mask off negative
7208b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             * from zero result.
7209b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             *
7210b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             * These are only an issue as we are printing the result in hex.
7211b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             *
7212b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             * The VEX emulation accuracy for the vmaddfp and vnmsubfp
7213b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             * instructions is off by a single bit in the least significant
7214b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             * bit position of the result.  Mask off the LSB.
7215b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             */
7216b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe
7217b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe             for (n=0; n<4; n++) {
7218b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                /* NAN result*/
7219b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                if (((dst[n] & 0x7F800000) == 0x7F800000) &&
7220b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                   ((dst[n] & 0x7FFFFF) != 0))
7221b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                   dst[n] &= 0x7FFFFFFF;
7222b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe
7223b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                /* Negative zero result */
7224b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                else if (dst[n] == 0x80000000)
7225b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                    dst[n] = 0x0;
7226b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe
7227b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                else
7228b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                    /* The actual result and the emulated result for the
7229b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                     * vmaddfp and vnmsubfp instructions sometimes differ
7230b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                     * in the least significant bit.  Mask off the bit.
7231b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                     */
7232b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                    dst[n] &= 0xFFFFFFFE;
7233b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe                }
7234b0e5b69e93fc6525194079347fb5e8d611c99ebdphilippe
7235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
7236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src1[0], src1[1], src1[2], src1[3],
7237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src2[0], src2[1], src2[2], src2[3],
7238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src3[0], src3[1], src3[2], src3[3]);
7239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s:  => %08x %08x %08x %08x ", name,
7240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   dst[0], dst[1], dst[2], dst[3]);
7241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
7242f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            p_vscr = (unsigned int*)&vscr;
7243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x, %08x)\n", flags, p_vscr[3]);
7244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x)\n", flags);
7246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
7249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
72537c01859c190613f313f57fc4b1c6bb14124b00c7sewardjstatic void vcvt_cb (const char* name, test_func_t func_IN,
72548f5fc19da719edcd8dfca920837bde7ce1d3accacerion                     unused uint32_t test_flags)
72558f5fc19da719edcd8dfca920837bde7ce1d3accacerion{
72567c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   volatile test_func_t func;
72577c01859c190613f313f57fc4b1c6bb14124b00c7sewardj   uint32_t* func_buf = get_rwx_area();
72588f5fc19da719edcd8dfca920837bde7ce1d3accacerion   volatile uint32_t flags, tmpcr;
72598f5fc19da719edcd8dfca920837bde7ce1d3accacerion   volatile vector unsigned int tmpvscr;
7260f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   volatile vector unsigned int vec_in, vec_out, vscr;
7261f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int *src, *dst;
72628f5fc19da719edcd8dfca920837bde7ce1d3accacerion   int i,j;
7263f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT
7264f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion   unsigned int* p_vscr;
7265f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif
72668f5fc19da719edcd8dfca920837bde7ce1d3accacerion
72678f5fc19da719edcd8dfca920837bde7ce1d3accacerion   for (i=0; i<nb_vfargs; i++) {
7268f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion      vec_in = (vector unsigned int)vfargs[i];
72698f5fc19da719edcd8dfca920837bde7ce1d3accacerion
72708f5fc19da719edcd8dfca920837bde7ce1d3accacerion      for (j=0; j<32; j+=9) {
7271f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vec_out = (vector unsigned int){ 0,0,0,0 };
72728f5fc19da719edcd8dfca920837bde7ce1d3accacerion
72738f5fc19da719edcd8dfca920837bde7ce1d3accacerion         /* Patch up the instruction */
72747c01859c190613f313f57fc4b1c6bb14124b00c7sewardj         func = init_function( func_IN, func_buf );
727552675269f43c06380b04bf502c509cca4ee643b6cerion         patch_op_imm(&func_buf[0], j, 16, 5);
72768f5fc19da719edcd8dfca920837bde7ce1d3accacerion
72778f5fc19da719edcd8dfca920837bde7ce1d3accacerion         /* Save flags */
72788f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
72798f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
72808f5fc19da719edcd8dfca920837bde7ce1d3accacerion
72818f5fc19da719edcd8dfca920837bde7ce1d3accacerion         // reset VSCR and CR
7282f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
72838f5fc19da719edcd8dfca920837bde7ce1d3accacerion         flags = 0;
72849f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) );
72858f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
72868f5fc19da719edcd8dfca920837bde7ce1d3accacerion
72878f5fc19da719edcd8dfca920837bde7ce1d3accacerion         // load input -> r14
72889f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in));
72898f5fc19da719edcd8dfca920837bde7ce1d3accacerion
72908f5fc19da719edcd8dfca920837bde7ce1d3accacerion         // do stuff
72918f5fc19da719edcd8dfca920837bde7ce1d3accacerion         (*func)();
72928f5fc19da719edcd8dfca920837bde7ce1d3accacerion
72938f5fc19da719edcd8dfca920837bde7ce1d3accacerion         // retrieve output <- r17
72948f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
72958f5fc19da719edcd8dfca920837bde7ce1d3accacerion
72968f5fc19da719edcd8dfca920837bde7ce1d3accacerion         // get CR,VSCR flags
72978f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
72988f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
72998f5fc19da719edcd8dfca920837bde7ce1d3accacerion
73008f5fc19da719edcd8dfca920837bde7ce1d3accacerion         /* Restore flags */
73018f5fc19da719edcd8dfca920837bde7ce1d3accacerion         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
73029f4e472e71cf49860745eaf439a021f00ddc2c7csewardj         __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr));
73038f5fc19da719edcd8dfca920837bde7ce1d3accacerion
7304f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         src = (unsigned int*)&vec_in;
7305f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         dst = (unsigned int*)&vec_out;
7306b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7307f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion         printf("%s: %08x (%13e), %2u", name, src[0], *(float*)(&src[0]), j);
73088f5fc19da719edcd8dfca920837bde7ce1d3accacerion         printf(" => %08x (%13e) ", dst[0], *(float*)(&dst[0]));
73098f5fc19da719edcd8dfca920837bde7ce1d3accacerion//         printf(" => %08x ", dst[0]);
73108f5fc19da719edcd8dfca920837bde7ce1d3accacerion#if defined TEST_VSCR_SAT
7311f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion            p_vscr = (unsigned int*)&vscr;
73128f5fc19da719edcd8dfca920837bde7ce1d3accacerion            printf("(%08x, %08x)\n", flags, p_vscr[3]);
73138f5fc19da719edcd8dfca920837bde7ce1d3accacerion#else
73148f5fc19da719edcd8dfca920837bde7ce1d3accacerion            printf("(%08x)\n", flags);
73158f5fc19da719edcd8dfca920837bde7ce1d3accacerion#endif
73168f5fc19da719edcd8dfca920837bde7ce1d3accacerion      }
73178f5fc19da719edcd8dfca920837bde7ce1d3accacerion      if (verbose) printf("\n");
73188f5fc19da719edcd8dfca920837bde7ce1d3accacerion   }
73198f5fc19da719edcd8dfca920837bde7ce1d3accacerion}
73208f5fc19da719edcd8dfca920837bde7ce1d3accacerion
73218f5fc19da719edcd8dfca920837bde7ce1d3accacerionstatic special_t special_av_float_ops[] = {
73228f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
73238f5fc19da719edcd8dfca920837bde7ce1d3accacerion      "vcfux", /* One reg, one 5-bit uimm argument */
73248f5fc19da719edcd8dfca920837bde7ce1d3accacerion      &vcvt_cb,
73258f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
73268f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
73278f5fc19da719edcd8dfca920837bde7ce1d3accacerion      "vcfsx", /* One reg, one 5-bit uimm argument */
73288f5fc19da719edcd8dfca920837bde7ce1d3accacerion      &vcvt_cb,
73298f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
73308f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
73318f5fc19da719edcd8dfca920837bde7ce1d3accacerion      "vctuxs", /* One reg, one 5-bit uimm argument */
73328f5fc19da719edcd8dfca920837bde7ce1d3accacerion      &vcvt_cb,
73338f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
73348f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
73358f5fc19da719edcd8dfca920837bde7ce1d3accacerion      "vcfux", /* One reg, one 5-bit uimm argument */
73368f5fc19da719edcd8dfca920837bde7ce1d3accacerion      &vcvt_cb,
73378f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
73388f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
73398f5fc19da719edcd8dfca920837bde7ce1d3accacerion      "vctsxs", /* One reg, one 5-bit uimm argument */
73408f5fc19da719edcd8dfca920837bde7ce1d3accacerion      &vcvt_cb,
73418f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
73428f5fc19da719edcd8dfca920837bde7ce1d3accacerion   {
73438f5fc19da719edcd8dfca920837bde7ce1d3accacerion      NULL,
73448f5fc19da719edcd8dfca920837bde7ce1d3accacerion      NULL,
73458f5fc19da719edcd8dfca920837bde7ce1d3accacerion   },
73468f5fc19da719edcd8dfca920837bde7ce1d3accacerion};
73478f5fc19da719edcd8dfca920837bde7ce1d3accacerion
73488f5fc19da719edcd8dfca920837bde7ce1d3accacerionstatic void test_av_float_special (const char* name, test_func_t func,
73498f5fc19da719edcd8dfca920837bde7ce1d3accacerion                                   uint32_t test_flags)
73508f5fc19da719edcd8dfca920837bde7ce1d3accacerion{
73518f5fc19da719edcd8dfca920837bde7ce1d3accacerion   test_special(special_av_float_ops, name, func, test_flags);
73528f5fc19da719edcd8dfca920837bde7ce1d3accacerion}
73538f5fc19da719edcd8dfca920837bde7ce1d3accacerion
7354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
7355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
7356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
7357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t altivec_float_loops[] = {
7358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_one_arg,
7359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_two_args,
7360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_three_args,
7361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_two_args,
7362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
73648f5fc19da719edcd8dfca920837bde7ce1d3accacerion   &test_av_float_special,
7365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
7369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
7370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7371f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#endif /* defined (HAS_ALTIVEC) */
7372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
7375530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_ppc405 (const char* name, test_func_t func,
7376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                         unused uint32_t test_flags)
7377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
7379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k;
7380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
7382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
7383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_iargs; k++) {
7384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r14 = iargs[i];
7385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r15 = iargs[j];
7386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Beware: the third argument and the result
7387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             * are in the same register
7388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             */
7389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r17 = iargs[k];
7390b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
7392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
7393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpcr = r18;
7394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfxer 18");
7395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpxer = r18;
7396b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Set up flags for test */
7398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = 0;
7399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 18");
7400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
7401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
7402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
7403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = r18;
7404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfxer 18");
7405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            xer = r18;
7406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            res = r17;
7407b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
7409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpcr;
7410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 18");
7411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpxer;
7412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
7413b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n",
7415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   name, iargs[i], iargs[j], iargs[k], res, flags, xer);
7416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
7418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
7422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7423530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic int check_filter (char *filter)
7424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7425530f73578552bc876a51fbf90cb6be29769bb362sewardj   char *c;
7426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int ret = 1;
7427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (filter != NULL) {
7429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      c = strchr(filter, '*');
7430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (c != NULL) {
7431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         *c = '\0';
7432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ret = 0;
7433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   return ret;
7437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7439530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic int check_name (const char* name, const char *filter,
7440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                       int exact)
7441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int nlen, flen;
7443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int ret = 0;
7444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (filter != NULL) {
7446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (; isspace(*name); name++)
7447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      FDPRINTF("Check '%s' againt '%s' (%s match)\n",
7449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               name, filter, exact ? "exact" : "starting");
7450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      nlen = strlen(name);
7451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flen = strlen(filter);
7452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (exact) {
7453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (nlen == flen && memcmp(name, filter, flen) == 0)
7454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            ret = 1;
7455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      } else {
7456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (flen <= nlen && memcmp(name, filter, flen) == 0)
7457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            ret = 1;
7458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {
7460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ret = 1;
7461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   return ret;
7463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct insn_sel_flags_t_struct {
7468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int one_arg, two_args, three_args;
7469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int arith, logical, compare, ldst;
7470074637e5b8af220614f9727bccc177e482b7ddc5carll   int integer, floats, p405, altivec, faltivec, misc;
7471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int cr;
7472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} insn_sel_flags_t;
7473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void do_tests ( insn_sel_flags_t seln_flags,
7475530f73578552bc876a51fbf90cb6be29769bb362sewardj                       char *filter)
7476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
7478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_loop_t tmpl;
7479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_loop_t *loop;
7481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_t *tests;
7482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int nb_args, type, family;
7483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, n;
7484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int exact;
7485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exact = check_filter(filter);
7487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   n = 0;
7488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; all_tests[i].name != NULL; i++) {
7489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      nb_args = all_tests[i].flags & PPC_NB_ARGS;
7490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check number of arguments */
7491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if ((nb_args == 1 && !seln_flags.one_arg) ||
7492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (nb_args == 2 && !seln_flags.two_args) ||
7493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (nb_args == 3 && !seln_flags.three_args))
7494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check instruction type */
7496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      type = all_tests[i].flags & PPC_TYPE;
7497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if ((type == PPC_ARITH   && !seln_flags.arith) ||
7498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (type == PPC_LOGICAL && !seln_flags.logical) ||
7499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (type == PPC_COMPARE && !seln_flags.compare) ||
7500a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe          (type == PPC_LDST && !seln_flags.ldst) ||
7501a6be8b1a7dd8b02ba74d7865430aa8ec44b4a79cphilippe          (type == PPC_POPCNT && !seln_flags.arith))
7502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check instruction family */
7504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      family = all_tests[i].flags & PPC_FAMILY;
7505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if ((family == PPC_INTEGER  && !seln_flags.integer) ||
7506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_FLOAT    && !seln_flags.floats) ||
7507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_405      && !seln_flags.p405) ||
7508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_ALTIVEC  && !seln_flags.altivec) ||
7509074637e5b8af220614f9727bccc177e482b7ddc5carll          (family == PPC_MISC  && !seln_flags.misc) ||
7510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_FALTIVEC && !seln_flags.faltivec))
7511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check flags update */
7513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (((all_tests[i].flags & PPC_CR)  && seln_flags.cr == 0) ||
7514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (!(all_tests[i].flags & PPC_CR) && seln_flags.cr == 1))
7515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* All passed, do the tests */
7517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tests = all_tests[i].tests;
7518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Select the test loop */
7519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      switch (family) {
7520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_INTEGER:
7521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &int_loops[nb_args - 1];
7522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7523074637e5b8af220614f9727bccc177e482b7ddc5carll      case PPC_MISC:
7524074637e5b8af220614f9727bccc177e482b7ddc5carll         loop = &misc_loops[0];
7525074637e5b8af220614f9727bccc177e482b7ddc5carll         break;
7526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_FLOAT:
7527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
7528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &float_loops[nb_args - 1];
7529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
7532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "PPC floating point instructions tests "
7533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "are disabled on your host\n");
7534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
7535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_405:
7537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
7538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpl = &test_ppc405;
7539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &tmpl;
7540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
7543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "PPC405 instructions tests are disabled on your host\n");
7544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
7546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_ALTIVEC:
7547f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
7548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &altivec_int_loops[nb_args - 1];
7549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
7552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "Altivec instructions tests are disabled on your host\n");
7553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_FALTIVEC:
7556f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
7557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &altivec_float_loops[nb_args - 1];
7558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
7560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
7561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "Altivec float instructions tests "
7562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "are disabled on your host\n");
7563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      default:
7566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("ERROR: unknown insn family %08x\n", family);
7567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
7568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (1 || verbose > 0)
7570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:\n", all_tests[i].name);
7571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; tests[j].name != NULL; j++) {
7572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (check_name(tests[j].name, filter, exact)) {
7573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            if (verbose > 1)
7574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               printf("Test instruction %s\n", tests[j].name);
7575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*loop)(tests[j].name, tests[j].func, all_tests[i].flags);
7576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("\n");
7577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            n++;
7578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        }
7580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
7581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   printf("All done. Tested %d different instructions\n", n);
7583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void usage (void)
7587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (USAGE_SIMPLE)
7589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   fprintf(stderr,
7590f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion           "jm-insns [-1] [-2] [-3] [-*] [-t <type>] [-f <family>] [-u] "
7591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "[-n <filter>] [-r <test_rigour>] [-h]\n"
7592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-1: test opcodes with one argument\n"
7593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-2: test opcodes with two arguments\n"
7594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-3: test opcodes with three arguments\n"
7595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-*: launch test without checking the number of arguments\n"
7596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-t: launch test for instructions of type <type>\n"
7597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    recognized types:\n"
7598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tarith (or a)\n"
7599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tlogical (or l)\n"
7600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tcompare (or c)\n"
7601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tstoreload (or s)\n"
7602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-f: launch test for instructions of family <family>\n"
7603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    recognized families:\n"
7604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tinteger (or i)\n"
7605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tfloat (or f)\n"
7606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tppc405 (or mac)\n"
7607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\taltivec (or a)\n"
7608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-u: test instructions that update flags\n"
7609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-n: filter instructions with <filter>\n"
7610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    <filter> can be in two forms:\n"
7611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tname  : filter functions that exactly match <name>\n"
7612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tname* : filter functions that start with <name>\n"
7613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-r: set size of arg tables to use to define <test_rigour>\n"
7614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    recognized types:\n"
7615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tlarge (or l)\n"
7616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tsmall (or s) - default\n"
7617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-v: verbose (-v -v for more)\n"
7618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-h: print this help\n"
7619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           );
7620b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#else // #if !defined (USAGE_SIMPLE)
7621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   fprintf(stderr,
762257c3e5d80627eb327f15e059f85ecef735159ab5cerion           "Usage: jm-insns [OPTION]\n"
762357c3e5d80627eb327f15e059f85ecef735159ab5cerion           "\t-i: test integer instructions (default)\n"
762457c3e5d80627eb327f15e059f85ecef735159ab5cerion           "\t-f: test floating point instructions\n"
762557c3e5d80627eb327f15e059f85ecef735159ab5cerion           "\t-a: test altivec instructions\n"
7626074637e5b8af220614f9727bccc177e482b7ddc5carll           "\t-m: test miscellaneous instructions\n"
7627e1494c6807bd1744d615ce52d97599168eddb2edsewardj           "\t-A: test all (int, fp, altivec) instructions\n"
762857c3e5d80627eb327f15e059f85ecef735159ab5cerion           "\t-v: be verbose\n"
762957c3e5d80627eb327f15e059f85ecef735159ab5cerion           "\t-h: display this help and exit\n"
7630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           );
7631b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#endif // #if !defined (USAGE_SIMPLE)
7632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
763457c3e5d80627eb327f15e059f85ecef735159ab5cerion
7635b8efd2a1d18b2e2293527db3c8262f196008ffbecerion
7636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjint main (int argc, char **argv)
7637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
7638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (USAGE_SIMPLE)
763957c3e5d80627eb327f15e059f85ecef735159ab5cerion////////////////////////////////////////////////////////////////////////
7640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   unsigned char *tmp, *filter = NULL;
7641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   insn_sel_flags_t flags;
7642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int c;
7643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7644e1494c6807bd1744d615ce52d97599168eddb2edsewardj   // check HWord_t really is a host word
7645e1494c6807bd1744d615ce52d97599168eddb2edsewardj   assert(sizeof(void*) == sizeof(HWord_t));
7646e1494c6807bd1744d615ce52d97599168eddb2edsewardj
7647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.one_arg    = 0;
7648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.two_args   = 0;
7649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.three_args = 0;
7650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.arith      = 0;
7651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.logical    = 0;
7652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.compare    = 0;
7653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.ldst       = 0;
7654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.integer    = 0;
7655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.floats     = 0;
7656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.p405       = 0;
7657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.altivec    = 0;
7658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.faltivec   = 0;
7659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.cr         = -1;
7660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   while ((c = getopt(argc, argv, "123t:f:n:r:uvh")) != -1) {
7662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      switch (c) {
7663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case '1':
7664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.one_arg = 1;
7665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case '2':
7667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.two_args = 1;
7668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case '3':
7670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.three_args = 1;
7671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 't':
7673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmp = optarg;
7674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (strcmp(tmp, "arith") == 0 || strcmp(tmp, "a") == 0) {
7675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.arith = 1;
7676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "logical") == 0 || strcmp(tmp, "l") == 0) {
7677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.logical = 1;
7678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "compare") == 0 || strcmp(tmp, "c") == 0) {
7679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.compare = 1;
7680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "storeload") == 0 || strcmp(tmp, "s") == 0) {
7681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.ldst = 1;
7682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else {
7683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            goto bad_arg;
7684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'f':
7687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmp = optarg;
7688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (strcmp(tmp, "integer") == 0 || strcmp(tmp, "i") == 0) {
7689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.integer = 1;
7690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "float") == 0 || strcmp(tmp, "f") == 0) {
7691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.floats = 1;
7692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "ppc405") == 0 || strcmp(tmp, "mac") == 0) {
7693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.p405 = 1;
7694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "altivec") == 0 || strcmp(tmp, "a") == 0) {
7695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.altivec = 1;
7696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.faltivec = 1;
7697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else {
7698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            goto bad_arg;
7699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'n':
7702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         filter = optarg;
7703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'r':
7705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmp = optarg;
7706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (strcmp(tmp, "large") == 0 || strcmp(tmp, "l") == 0) {
7707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            arg_list_size = 1;
7708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "small") == 0 || strcmp(tmp, "s") == 0) {
7709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            arg_list_size = 0;
7710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else {
7711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            goto bad_arg;
7712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
7713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'u':
7716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.cr = 1;
7717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'h':
7719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
7720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 0;
7721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'v':
7722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         verbose++;
7723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      default:
7725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
7726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Unknown argument: '%c'\n", c);
7727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 1;
7728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      bad_arg:
7729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
7730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Bad argument for '%c': '%s'\n", c, tmp);
7731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 1;
7732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (argc != optind) {
7735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      usage();
7736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fprintf(stderr, "Bad number of arguments\n");
7737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      return 1;
7738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default n_args
7741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.one_arg == 0 && flags.two_args == 0 && flags.three_args == 0) {
7742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.one_arg = 1;
7743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.two_args = 1;
7744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.three_args = 1;
7745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default type
7747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.arith == 0 && flags.logical == 0 &&
7748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj       flags.compare == 0 && flags.ldst == 0) {
7749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.arith   = 1;
7750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.logical = 1;
7751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.compare = 1;
7752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.ldst    = 1;
7753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default family
7755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.integer == 0 && flags.floats == 0 &&
7756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj       flags.p405 == 0 && flags.altivec == 0 && flags.faltivec == 0) {
7757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.integer  = 1;
7758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.floats   = 1;
7759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.p405     = 1;
7760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.altivec  = 1;
7761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.faltivec = 1;
7762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default cr update
7764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.cr == -1)
7765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.cr = 2;       // both
7766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7767b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#else // #if !defined (USAGE_SIMPLE)
776857c3e5d80627eb327f15e059f85ecef735159ab5cerion////////////////////////////////////////////////////////////////////////
7769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Simple usage:
777057c3e5d80627eb327f15e059f85ecef735159ab5cerion      ./jm-insns -i   => int insns
777157c3e5d80627eb327f15e059f85ecef735159ab5cerion      ./jm-insns -f   => fp  insns
777257c3e5d80627eb327f15e059f85ecef735159ab5cerion      ./jm-insns -a   => av  insns
7773074637e5b8af220614f9727bccc177e482b7ddc5carll      ./jm-insns -m   => miscellaneous insns
7774e1494c6807bd1744d615ce52d97599168eddb2edsewardj      ./jm-insns -A   => int, fp and avinsns
7775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   */
7776530f73578552bc876a51fbf90cb6be29769bb362sewardj   char *filter = NULL;
7777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   insn_sel_flags_t flags;
7778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int c;
7779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Args
7781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.one_arg    = 1;
7782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.two_args   = 1;
7783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.three_args = 1;
7784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Type
7785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.arith      = 1;
7786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.logical    = 1;
7787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.compare    = 1;
7788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.ldst       = 1;
7789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Family
779057c3e5d80627eb327f15e059f85ecef735159ab5cerion   flags.integer    = 0;
7791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.floats     = 0;
7792074637e5b8af220614f9727bccc177e482b7ddc5carll   flags.misc       = 0;
7793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.p405       = 0;
7794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.altivec    = 0;
7795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.faltivec   = 0;
7796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Flags
7797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.cr         = 2;
7798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7799074637e5b8af220614f9727bccc177e482b7ddc5carll   while ((c = getopt(argc, argv, "ifmahvA")) != -1) {
7800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      switch (c) {
780157c3e5d80627eb327f15e059f85ecef735159ab5cerion      case 'i':
780257c3e5d80627eb327f15e059f85ecef735159ab5cerion         flags.integer  = 1;
780357c3e5d80627eb327f15e059f85ecef735159ab5cerion         break;
780457c3e5d80627eb327f15e059f85ecef735159ab5cerion      case 'f':
780557c3e5d80627eb327f15e059f85ecef735159ab5cerion         flags.floats   = 1;
780657c3e5d80627eb327f15e059f85ecef735159ab5cerion         break;
7807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'a':
7808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.altivec  = 1;
780905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         flags.faltivec = 1;
7810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7811074637e5b8af220614f9727bccc177e482b7ddc5carll      case 'm':
7812074637e5b8af220614f9727bccc177e482b7ddc5carll         flags.misc     = 1;
7813074637e5b8af220614f9727bccc177e482b7ddc5carll         break;
7814e1494c6807bd1744d615ce52d97599168eddb2edsewardj      case 'A':
7815e1494c6807bd1744d615ce52d97599168eddb2edsewardj         flags.integer  = 1;
7816e1494c6807bd1744d615ce52d97599168eddb2edsewardj         flags.floats   = 1;
7817e1494c6807bd1744d615ce52d97599168eddb2edsewardj         flags.altivec  = 1;
7818e1494c6807bd1744d615ce52d97599168eddb2edsewardj         flags.faltivec = 1;
7819e1494c6807bd1744d615ce52d97599168eddb2edsewardj         break;
7820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'h':
7821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
7822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 0;
7823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'v':
7824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         verbose++;
7825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
7826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      default:
7827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
7828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Unknown argument: '%c'\n", c);
7829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 1;
7830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
7831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   arg_list_size = 0;
7834b8efd2a1d18b2e2293527db3c8262f196008ffbecerion#endif // #if !defined (USAGE_SIMPLE)
7835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   build_iargs_table();
7838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   build_fargs_table();
7839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   build_ii16_table();
7840f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
7841b5b6311a5312378c0129587d0dc0b255188a1d53sewardj   if (flags.altivec || flags.faltivec) {
7842b5b6311a5312378c0129587d0dc0b255188a1d53sewardj      build_viargs_table();
7843b5b6311a5312378c0129587d0dc0b255188a1d53sewardj      build_vfargs_table();
7844b5b6311a5312378c0129587d0dc0b255188a1d53sewardj   }
7845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // dump_iargs();
7847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // dump_iargs16();
7848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // dump_vfargs();
7849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose > 1) {
7851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("\nInstruction Selection:\n");
7852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  n_args: \n");
7853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    one_arg    = %d\n", flags.one_arg);
7854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    two_args   = %d\n", flags.two_args);
7855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    three_args = %d\n", flags.three_args);
7856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  type: \n");
7857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    arith      = %d\n", flags.arith);
7858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    logical    = %d\n", flags.logical);
7859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    compare    = %d\n", flags.compare);
7860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    ldst       = %d\n", flags.ldst);
7861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  family: \n");
7862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    integer    = %d\n", flags.integer);
7863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    floats     = %d\n", flags.floats);
7864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    p405       = %d\n", flags.p405);
7865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    altivec    = %d\n", flags.altivec);
7866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    faltivec   = %d\n", flags.faltivec);
7867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  cr update: \n");
7868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    cr         = %d\n", flags.cr);
7869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("\n");
7870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  num args: \n");
7871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    iargs      - %d\n", nb_iargs);
7872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    fargs      - %d\n", nb_fargs);
7873f9fe602a426e4ec8e8ca18f0005af7319a566858sewardj#if defined (HAS_ALTIVEC)
7874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    viargs     - %d\n", nb_viargs);
7875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    vfargs     - %d\n", nb_vfargs);
7876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
7877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("\n");
7878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
7879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   do_tests( flags, filter );
7881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
7882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   return 0;
7883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
7884