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