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