1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* HOW TO COMPILE: 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown* 32bit build: 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown gcc -Winline -Wall -g -O -mregnames -maltivec 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown* 64bit build: 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown gcc -Winline -Wall -g -O -mregnames -maltivec -m64 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownThis program is useful, but the register usage conventions in 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownit are a complete dog. In particular, _patch_op_imm has to 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownbe inlined, else you wind up with it segfaulting in 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browncompletely different places due to corruption (of r20 in the 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browncase I chased). 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/ 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * test-ppc.c: 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * PPC tests for qemu-PPC CPU emulation checks 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Copyright (c) 2005 Jocelyn Mayer 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * This program is free software; you can redistribute it and/or 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * modify it under the terms of the GNU General Public License V2 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * as published by the Free Software Foundation 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * This program is distributed in the hope that it will be useful, 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * but WITHOUT ANY WARRANTY; without even the implied warranty of 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * GNU General Public License for more details. 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * You should have received a copy of the GNU General Public License 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * along with this program; if not, write to the Free Software 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Theory of operations: 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * a few registers are reserved for the test program: 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * r14 => r18 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * f14 => f18 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * I do preload test values in r14 thru r17 (or less, depending on the number 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * of register operands needed), patch the test opcode if any immediate 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * operands are required, execute the tested opcode. 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * XER, CCR and FPSCR are cleared before every test. 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * I always get the result in r17 and also save XER and CCR for fixed-point 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * operations. I also check FPSCR for floating points operations. 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Improvments: 49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * a more clever FPSCR management is needed: for now, I always test 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * the round-to-zero case. Other rounding modes also need to be tested. 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* 54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Operation details 55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * ----------------- 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * The 'test' functions (via all_tests[]) are wrappers of single asm instns 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * The 'loops' (e.g. int_loops) do the actual work: 59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * - loops over as many arguments as the instn needs (regs | imms) 60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * - sets up the environment (reset cr,xer, assign src regs...) 61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * - maybe modifies the asm instn to test different imm args 62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * - calls the test function 63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * - retrieves relevant register data (rD,cr,xer,...) 64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * - prints argument and result data. 65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * More specifically... 67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * all_tests[i] holds insn tests 69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * - of which each holds: {instn_test_arr[], description, flags} 70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * flags hold 3 instn classifiers: {family, type, arg_type} 72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * // The main test loop: 74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * do_tests( user_ctl_flags ) { 75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * foreach(curr_test = all_test[i]) { 76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * // flags are used to control what tests are run: 78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * if (curr_test->flags && !user_ctl_flags) 79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * continue; 80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * // a 'loop_family_arr' is chosen based on the 'family' flag... 82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * switch(curr_test->flags->family) { 83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * case x: loop_family_arr = int_loops; 84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * ... 85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * } 86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * // ...and the actual test_loop to run is found by indexing into 88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * // the loop_family_arr with the 'arg_type' flag: 89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * test_loop = loop_family[curr_test->flags->arg_type] 90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * // finally, loop over all instn tests for this test: 92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * foreach (instn_test = curr_test->instn_test_arr[i]) { 93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * // and call the test_loop with the current instn_test function,name 95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * test_loop( instn_test->func, instn_test->name ) 96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * } 97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * } 98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * } 99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Details of intruction patching for immediate operands 102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * ----------------------------------------------------- 103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * All the immediate insn test functions are of the form {imm_insn, blr} 104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * In order to patch one of these functions, we simply copy both insns 105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * to a stack buffer, and rewrite the immediate part of imm_insn. 106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * We then execute our stack buffer. 107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * All ppc instructions are 32bits wide, which makes this fairly easy. 108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Example: 110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * extern void test_addi (void); 111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * asm(".section \".text\"\n" 112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * " .align 2\n" 113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * " .type test_addi,@function\n" 114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * "test_addi:\n" 115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * " addi\n" 116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * " blr\n" 117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * " .previous\n" 118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * ); 119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * We are interested only in: 121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * " addi 17, 14, 0\n" 122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * " blr\n" 123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * In a loop test, we may see: 125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * uint32_t func_buf[2]; // our new stack based 'function' 126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * for imm... // loop over imm 127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * init_function( &func, func_buf ); // copy insns, set func ptr 128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * patch_op_imm16(&func_buf[0], imm); // patch 'addi' insn 129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * ... 130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * (*func)(); // exec our rewritten code 131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * patch_op_imm16() itself simply takes the uint32_t insn and overwrites 133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * the immediate field with the new value (which, for 'addi', is the 134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * low 16 bits). 135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * So in the loop test, if 'imm' is currently 9, and p[0] is: 137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 0x3A2E0000 => addi 17, 14, 0 138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * after patch_op_imm16(), func_buf[0] becomes: 140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 0x3A2E0009 => addi 17, 14, 9 141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Note: init_function() needs to be called on every iteration 143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * - don't ask me why! 144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/ 145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/**********************************************************************/ 148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Uncomment to enable many arguments for altivec insns */ 149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define USAGE_SIMPLE 150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Uncomment to enable many arguments for altivec insns */ 152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define ALTIVEC_ARGS_LARGE 153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Uncomment to enable output of CR flags for float tests */ 155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define TEST_FLOAT_FLAGS 156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Uncomment to enable debug output */ 158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define DEBUG_ARGS_BUILD 159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define DEBUG_FILTER 160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* These should be set at build time */ 162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define NO_FLOAT 163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define HAS_ALTIVEC // CFLAGS += -maltivec 164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define IS_PPC405 165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/**********************************************************************/ 166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdint.h> 169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "tests/sys_mman.h" 170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "tests/malloc.h" // memalign16 171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define STATIC_ASSERT(e) sizeof(struct { int:-!(e); }) 173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Something of the same size as void*, so can be safely be coerced 175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * to/from a pointer type. Also same size as the host's gp registers. 176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * According to the AltiVec section of the GCC manual, the syntax does 177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * not allow the use of a typedef name as a type specifier in conjunction 178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * with the vector keyword, so typedefs uint[32|64]_t are #undef'ed here 179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * and redefined using #define. 180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#undef uint32_t 182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#undef uint64_t 183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define uint32_t unsigned int 184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define uint64_t unsigned long long int 185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef uint32_t HWord_t; 188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef uint64_t HWord_t; 190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* __powerpc64__ */ 191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownenum { 193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown compile_time_test1 = STATIC_ASSERT(sizeof(uint32_t) == 4), 194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown compile_time_test2 = STATIC_ASSERT(sizeof(uint64_t) == 8), 195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ALLCR "cr0","cr1","cr2","cr3","cr4","cr5","cr6","cr7" 198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define SET_CR(_arg) \ 200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "b"(_arg) : ALLCR ); 201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define SET_XER(_arg) \ 203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtxer %0" : : "b"(_arg) : "xer" ); 204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define GET_CR(_lval) \ 206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=b"(_lval) ) 207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define GET_XER(_lval) \ 209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfxer %0" : "=b"(_lval) ) 210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define GET_CR_XER(_lval_cr,_lval_xer) \ 212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do { GET_CR(_lval_cr); GET_XER(_lval_xer); } while (0) 213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define SET_CR_ZERO \ 215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR(0) 216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define SET_XER_ZERO \ 218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_XER(0) 219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define SET_CR_XER_ZERO \ 221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do { SET_CR_ZERO; SET_XER_ZERO; } while (0) 222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define SET_FPSCR_ZERO \ 224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do { double _d = 0.0; \ 225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtfsf 0xFF, %0" : : "f"(_d) ); \ 226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } while (0) 227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* XXXX these must all be callee-save regs! */ 230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownregister double f14 __asm__ ("fr14"); 231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownregister double f15 __asm__ ("fr15"); 232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownregister double f16 __asm__ ("fr16"); 233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownregister double f17 __asm__ ("fr17"); 234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownregister HWord_t r14 __asm__ ("r14"); 235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownregister HWord_t r15 __asm__ ("r15"); 236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownregister HWord_t r16 __asm__ ("r16"); 237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownregister HWord_t r17 __asm__ ("r17"); 238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "config.h" // HAS_ALTIVEC 240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# include <altivec.h> 242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <assert.h> 244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <ctype.h> // isspace 245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdlib.h> 247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <string.h> 248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <unistd.h> // getopt 249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ASSEMBLY_FUNC(__fname, __insn) \ 253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm(".section \".text\"\n" \ 254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t.align 2\n" \ 255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t.type "__fname",@function\n" \ 256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __fname":\n" \ 257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t"__insn"\n" \ 258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\tblr\n" \ 259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t.previous\n" \ 260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ) 261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ASSEMBLY_FUNC(__fname, __insn) \ 263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm(".section \".text\"\n" \ 264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t.align 2\n" \ 265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t.global "__fname"\n" \ 266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t.section \".opd\",\"aw\"\n" \ 267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t.align 3\n" \ 268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ""__fname":\n" \ 269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t.quad ."__fname",.TOC.@tocbase,0\n" \ 270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t.previous\n" \ 271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t.type ."__fname",@function\n" \ 272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t.global ."__fname"\n" \ 273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "."__fname":\n" \ 274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t"__insn"\n" \ 275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\tblr\n" \ 276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ) 277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifndef __powerpc64__ 278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Return a pointer to a 1-page area where is is safe to both write 281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown and execute instructions. Area is filled with 'trap' insns. */ 282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic 283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownuint32_t* get_rwx_area ( void ) 284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static uint32_t* p = NULL; 287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (p == NULL) { 288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p = mmap(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, 289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); 290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(p != MAP_FAILED); 291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 0; i < 4096/sizeof(uint32_t); i++) 294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p[i] = 0x7fe00008; /* trap */ 295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return p; 297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* -------------- BEGIN #include "test-ppc.h" -------------- */ 301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* 302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * test-ppc.h: 303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * PPC tests for qemu-PPC CPU emulation checks - definitions 304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Copyright (c) 2005 Jocelyn Mayer 306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * This program is free software; you can redistribute it and/or 308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * modify it under the terms of the GNU General Public License V2 309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * as published by the Free Software Foundation 310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * This program is distributed in the hope that it will be useful, 312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * but WITHOUT ANY WARRANTY; without even the implied warranty of 313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * GNU General Public License for more details. 315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * You should have received a copy of the GNU General Public License 317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * along with this program; if not, write to the Free Software 318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (__TEST_PPC_H__) 322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define __TEST_PPC_H__ 323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdint.h> 325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void (*test_func_t) (void); 327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct test_t test_t; 328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct test_table_t test_table_t; 329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct test_t { 330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func; 331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const char *name; 332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct test_table_t { 335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_t *tests; 336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const char *name; 337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t flags; 338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void (*test_loop_t) (const char *name, test_func_t func, 341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t flags); 342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownenum test_flags { 344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Nb arguments */ 345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_ONE_ARG = 0x00000001, 346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_TWO_ARGS = 0x00000002, 347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_THREE_ARGS = 0x00000003, 348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_CMP_ARGS = 0x00000004, // family: compare 349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_CMPI_ARGS = 0x00000005, // family: compare 350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_TWO_I16 = 0x00000006, // family: arith/logical 351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_SPECIAL = 0x00000007, // family: logical 352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_LD_ARGS = 0x00000008, // family: ldst 353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_LDX_ARGS = 0x00000009, // family: ldst 354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_ST_ARGS = 0x0000000A, // family: ldst 355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_STX_ARGS = 0x0000000B, // family: ldst 356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_NB_ARGS = 0x0000000F, 357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Type */ 358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_ARITH = 0x00000100, 359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_LOGICAL = 0x00000200, 360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_COMPARE = 0x00000300, 361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_CROP = 0x00000400, 362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_LDST = 0x00000500, 363663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng PPC_POPCNT = 0x00000600, 364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_TYPE = 0x00000F00, 365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Family */ 366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_INTEGER = 0x00010000, 367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_FLOAT = 0x00020000, 368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_405 = 0x00030000, 369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_ALTIVEC = 0x00040000, 370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_FALTIVEC = 0x00050000, 371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_FAMILY = 0x000F0000, 372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Flags: these may be combined, so use separate bitfields. */ 373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_CR = 0x01000000, 374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown PPC_XER_CA = 0x02000000, 375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (__TEST_PPC_H__) */ 378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* -------------- END #include "test-ppc.h" -------------- */ 380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (DEBUG_ARGS_BUILD) 385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AB_DPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0) 386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AB_DPRINTF(fmt, args...) do { } while (0) 388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (DEBUG_FILTER) 391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define FDPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0) 392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define FDPRINTF(fmt, args...) do { } while (0) 394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Produce the 64-bit pattern corresponding to the supplied double. */ 398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic uint64_t double_to_bits ( double d ) 399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown union { uint64_t i; double d; } u; 401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(8 == sizeof(uint64_t)); 402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(8 == sizeof(double)); 403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(8 == sizeof(u)); 404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown u.d = d; 405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return u.i; 406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0 409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic float bits_to_float ( uint32_t i ) 410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown union { uint32_t i; float f; } u; 412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(4 == sizeof(uint32_t)); 413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(4 == sizeof(float)); 414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(4 == sizeof(u)); 415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown u.i = i; 416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return u.f; 417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void AB_DPRINTF_VEC32x4 ( vector unsigned int v ) 423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (DEBUG_ARGS_BUILD) 425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_int = (unsigned int*)&v; 427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("val"); 428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<4; i++) { 429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF(" %08x", p_int[i]); 430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("\n"); 432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define unused __attribute__ (( unused )) 438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* -------------- BEGIN #include "ops-ppc.c" -------------- */ 441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* #include "test-ppc.h" */ 443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_add (void) 445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("add 17, 14, 15"); 447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addo (void) 450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addo 17, 14, 15"); 452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addc (void) 455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addc 17, 14, 15"); 457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addco (void) 460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addco 17, 14, 15"); 462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divw (void) 465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divw 17, 14, 15"); 467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divwo (void) 470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divwo 17, 14, 15"); 472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divwu (void) 475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divwu 17, 14, 15"); 477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divwuo (void) 480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divwuo 17, 14, 15"); 482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhw (void) 485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhw 17, 14, 15"); 487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhwu (void) 490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhwu 17, 14, 15"); 492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mullw (void) 495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mullw 17, 14, 15"); 497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mullwo (void) 500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mullwo 17, 14, 15"); 502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subf (void) 505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subf 17, 14, 15"); 507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfo (void) 510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfo 17, 14, 15"); 512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfc (void) 515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfc 17, 14, 15"); 517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfco (void) 520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfco 17, 14, 15"); 522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulld (void) 526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulld 17, 14, 15"); 528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhd (void) 531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhd 17, 14, 15"); 533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhdu (void) 536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhdu 17, 14, 15"); 538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divd (void) 541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divd 17, 14, 15"); 543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divdu (void) 546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divdu 17, 14, 15"); 548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ia_ops_two[] = { 552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_add , " add", }, 553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addo , " addo", }, 554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addc , " addc", }, 555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addco , " addco", }, 556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divw , " divw", }, 557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divwo , " divwo", }, 558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divwu , " divwu", }, 559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divwuo , " divwuo", }, 560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhw , " mulhw", }, 561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhwu , " mulhwu", }, 562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mullw , " mullw", }, 563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mullwo , " mullwo", }, 564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subf , " subf", }, 565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfo , " subfo", }, 566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfc , " subfc", }, 567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfco , " subfco", }, 568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhd , " mulhd", }, 570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhdu , " mulhdu", }, 571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulld , " mulld", }, 572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divd , " divd", }, 573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divdu , " divdu", }, 574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_add_ (void) 579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("add. 17, 14, 15"); 581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addo_ (void) 584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addo. 17, 14, 15"); 586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addc_ (void) 589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addc. 17, 14, 15"); 591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addco_ (void) 594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addco. 17, 14, 15"); 596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divw_ (void) 599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divw. 17, 14, 15"); 601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divwo_ (void) 604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divwo. 17, 14, 15"); 606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divwu_ (void) 609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divwu. 17, 14, 15"); 611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divwuo_ (void) 614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divwuo. 17, 14, 15"); 616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhw_ (void) 619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhw. 17, 14, 15"); 621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhwu_ (void) 624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhwu. 17, 14, 15"); 626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mullw_ (void) 629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mullw. 17, 14, 15"); 631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mullwo_ (void) 634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mullwo. 17, 14, 15"); 636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subf_ (void) 639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subf. 17, 14, 15"); 641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfo_ (void) 644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfo. 17, 14, 15"); 646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfc_ (void) 649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfc. 17, 14, 15"); 651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfco_ (void) 654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfco. 17, 14, 15"); 656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhd_ (void) 660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhd. 17, 14, 15"); 662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhdu_ (void) 665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhdu. 17, 14, 15"); 667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulld_ (void) 670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulld. 17, 14, 15"); 672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divd_ (void) 675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divd. 17, 14, 15"); 677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_divdu_ (void) 680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("divdu. 17, 14, 15"); 682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_iar_ops_two[] = { 686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_add_ , " add.", }, 687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addo_ , " addo.", }, 688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addc_ , " addc.", }, 689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addco_ , " addco.", }, 690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divw_ , " divw.", }, 691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divwo_ , " divwo.", }, 692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divwu_ , " divwu.", }, 693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divwuo_ , " divwuo.", }, 694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhw_ , " mulhw.", }, 695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhwu_ , " mulhwu.", }, 696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mullw_ , " mullw.", }, 697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mullwo_ , " mullwo.", }, 698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subf_ , " subf.", }, 699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfo_ , " subfo.", }, 700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfc_ , " subfc.", }, 701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfco_ , " subfco.", }, 702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhd_ , " mulhd.", }, 704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhdu_ , " mulhdu.", }, 705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulld_ , " mulld.", }, 706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divd_ , " divd.", }, 707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_divdu_ , " divdu.", }, 708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_adde (void) 713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("adde 17, 14, 15"); 715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addeo (void) 718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addeo 17, 14, 15"); 720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfe (void) 723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfe 17, 14, 15"); 725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfeo (void) 728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfeo 17, 14, 15"); 730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_iac_ops_two[] = { 733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_adde , " adde", }, 734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addeo , " addeo", }, 735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfe , " subfe", }, 736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfeo , " subfeo", }, 737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_adde_ (void) 741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("adde. 17, 14, 15"); 743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addeo_ (void) 746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addeo. 17, 14, 15"); 748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfe_ (void) 751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfe. 17, 14, 15"); 753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfeo_ (void) 756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfeo. 17, 14, 15"); 758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_iacr_ops_two[] = { 761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_adde_ , " adde.", }, 762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addeo_ , " addeo.", }, 763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfe_ , " subfe.", }, 764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfeo_ , " subfeo.", }, 765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_and (void) 769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("and 17, 14, 15"); 771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_andc (void) 774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("andc 17, 14, 15"); 776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_eqv (void) 779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("eqv 17, 14, 15"); 781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nand (void) 784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nand 17, 14, 15"); 786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nor (void) 789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nor 17, 14, 15"); 791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_or (void) 794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("or 17, 14, 15"); 796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_orc (void) 799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("orc 17, 14, 15"); 801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_xor (void) 804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("xor 17, 14, 15"); 806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_slw (void) 809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("slw 17, 14, 15"); 811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_sraw (void) 814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("sraw 17, 14, 15"); 816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_srw (void) 819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("srw 17, 14, 15"); 821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_sld (void) 825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("sld 17, 14, 15"); 827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_srad (void) 830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("srad 17, 14, 15"); 832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_srd (void) 835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("srd 17, 14, 15"); 837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_il_ops_two[] = { 841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_and , " and", }, 842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_andc , " andc", }, 843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_eqv , " eqv", }, 844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nand , " nand", }, 845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nor , " nor", }, 846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_or , " or", }, 847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_orc , " orc", }, 848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_xor , " xor", }, 849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_slw , " slw", }, 850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_sraw , " sraw", }, 851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_srw , " srw", }, 852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_sld , " sld", }, 854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_srad , " srad", }, 855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_srd , " srd", }, 856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_and_ (void) 861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("and. 17, 14, 15"); 863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_andc_ (void) 866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("andc. 17, 14, 15"); 868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_eqv_ (void) 871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("eqv. 17, 14, 15"); 873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nand_ (void) 876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nand. 17, 14, 15"); 878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nor_ (void) 881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nor. 17, 14, 15"); 883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_or_ (void) 886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("or. 17, 14, 15"); 888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_orc_ (void) 891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("orc. 17, 14, 15"); 893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_xor_ (void) 896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("xor. 17, 14, 15"); 898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_slw_ (void) 901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("slw. 17, 14, 15"); 903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_sraw_ (void) 906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("sraw. 17, 14, 15"); 908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_srw_ (void) 911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("srw. 17, 14, 15"); 913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_sld_ (void) 917ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("sld. 17, 14, 15"); 919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 921ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_srad_ (void) 922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("srad. 17, 14, 15"); 924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_srd_ (void) 927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("srd. 17, 14, 15"); 929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ilr_ops_two[] = { 933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_and_ , " and.", }, 934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_andc_ , " andc.", }, 935ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_eqv_ , " eqv.", }, 936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nand_ , " nand.", }, 937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nor_ , " nor.", }, 938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_or_ , " or.", }, 939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_orc_ , " orc.", }, 940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_xor_ , " xor.", }, 941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_slw_ , " slw.", }, 942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_sraw_ , " sraw.", }, 943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_srw_ , " srw.", }, 944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_sld_ , " sld.", }, 946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_srad_ , " srad.", }, 947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_srd_ , " srd.", }, 948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 949ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 950ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 951ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 952ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_cmpw (void) 953ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 954ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("cmpw 2, 14, 15"); 955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_cmplw (void) 958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("cmplw 2, 14, 15"); 960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_cmpd (void) 964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("cmpd 2, 14, 15"); 966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_cmpld (void) 969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("cmpld 2, 14, 15"); 971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_icr_ops_two[] = { 975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cmpw , " cmpw", }, 976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cmplw , " cmplw", }, 977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cmpd , " cmpd", }, 979ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cmpld , " cmpld", }, 980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 983ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 984ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_cmpwi (void); 985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_cmpwi", "cmpwi 2, 14, 0"); 986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_cmplwi (void); 988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_cmplwi", "cmplwi 2, 14, 0"); 989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 990ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_cmpdi (void); 992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_cmpdi", "cmpdi 2, 14, 0"); 993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_cmpldi (void); 995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_cmpldi", "cmpldi 2, 14, 0"); 996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 998ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_icr_ops_two_i16[] = { 999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cmpwi , " cmpwi", }, 1000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cmplwi , " cmplwi", }, 1001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cmpdi , " cmpdi", }, 1003ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cmpldi , " cmpldi", }, 1004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_addi (void); 1009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_addi", "addi 17, 14, 0"); 1010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_addic (void); 1012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_addic", "addic 17, 14, 0"); 1013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_addis (void); 1015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_addis", "addis 17, 14, 0"); 1016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1017ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_mulli (void); 1018ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_mulli", "mulli 17, 14, 0"); 1019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_subfic (void); 1021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_subfic", "subfic 17, 14, 0"); 1022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ia_ops_two_i16[] = { 1024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addi , " addi", }, 1025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addic , " addic", }, 1026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addis , " addis", }, 1027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulli , " mulli", }, 1028ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfic , " subfic", }, 1029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_addic_ (void); 1033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_addic_", "addic. 17, 14, 0"); 1034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_iar_ops_two_i16[] = { 1036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addic_ , " addic.", }, 1037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_ori (void); 1041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_ori", "ori 17, 14, 0"); 1042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_oris (void); 1044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_oris", "oris 17, 14, 0"); 1045ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_xori (void); 1047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_xori", "xori 17, 14, 0"); 1048ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_xoris (void); 1050ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_xoris", "xoris 17, 14, 0"); 1051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1052ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_il_ops_two_i16[] = { 1053ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_ori , " ori", }, 1054ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_oris , " oris", }, 1055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_xori , " xori", }, 1056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_xoris , " xoris", }, 1057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_andi_ (void); 1061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_andi_", "andi. 17, 14, 0"); 1062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_andis_ (void); 1064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_andis_", "andis. 17, 14, 0"); 1065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1066ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ilr_ops_two_i16[] = { 1067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_andi_ , " andi.", }, 1068ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_andis_ , " andis.", }, 1069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_crand (void) 1073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("crand 17, 14, 15"); 1075ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1076ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1077ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_crandc (void) 1078ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1079ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("crandc 17, 14, 15"); 1080ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1081ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1082ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_creqv (void) 1083ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1084ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("creqv 17, 14, 15"); 1085ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1086ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1087ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_crnand (void) 1088ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1089ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("crnand 17, 14, 15"); 1090ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1091ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1092ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_crnor (void) 1093ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1094ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("crnor 17, 14, 15"); 1095ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1096ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1097ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_cror (void) 1098ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1099ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("cror 17, 14, 15"); 1100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_crorc (void) 1103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("crorc 17, 14, 15"); 1105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_crxor (void) 1108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("crxor 17, 14, 15"); 1110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_crl_ops_two[] = { 1113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_crand , " crand", }, 1114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_crandc , " crandc", }, 1115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_creqv , " creqv", }, 1116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_crnand , " crnand", }, 1117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_crnor , " crnor", }, 1118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cror , " cror", }, 1119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_crorc , " crorc", }, 1120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_crxor , " crxor", }, 1121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addme (void) 1125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addme 17, 14"); 1127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addmeo (void) 1130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addmeo 17, 14"); 1132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addze (void) 1135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addze 17, 14"); 1137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addzeo (void) 1140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addzeo 17, 14"); 1142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfme (void) 1145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfme 17, 14"); 1147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfmeo (void) 1150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfmeo 17, 14"); 1152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfze (void) 1155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfze 17, 14"); 1157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfzeo (void) 1160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfzeo 17, 14"); 1162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_iac_ops_one[] = { 1165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addme , " addme", }, 1166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addmeo , " addmeo", }, 1167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addze , " addze", }, 1168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addzeo , " addzeo", }, 1169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfme , " subfme", }, 1170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfmeo , " subfmeo", }, 1171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfze , " subfze", }, 1172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfzeo , " subfzeo", }, 1173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addme_ (void) 1177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addme. 17, 14"); 1179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addmeo_ (void) 1182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addmeo. 17, 14"); 1184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addze_ (void) 1187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addze. 17, 14"); 1189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_addzeo_ (void) 1192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("addzeo. 17, 14"); 1194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfme_ (void) 1197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfme. 17, 14"); 1199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfmeo_ (void) 1202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfmeo. 17, 14"); 1204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfze_ (void) 1207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfze. 17, 14"); 1209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_subfzeo_ (void) 1212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("subfzeo. 17, 14"); 1214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_iacr_ops_one[] = { 1217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addme_ , " addme.", }, 1218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addmeo_ , " addmeo.", }, 1219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addze_ , " addze.", }, 1220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_addzeo_ , " addzeo.", }, 1221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfme_ , " subfme.", }, 1222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfmeo_ , " subfmeo.", }, 1223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfze_ , " subfze.", }, 1224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_subfzeo_ , " subfzeo.", }, 1225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_cntlzw (void) 1229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("cntlzw 17, 14"); 1231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_extsb (void) 1234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("extsb 17, 14"); 1236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_extsh (void) 1239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("extsh 17, 14"); 1241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_neg (void) 1244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("neg 17, 14"); 1246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nego (void) 1249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nego 17, 14"); 1251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_cntlzd (void) 1255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("cntlzd 17, 14"); 1257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_extsw (void) 1260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("extsw 17, 14"); 1262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_il_ops_one[] = { 1266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cntlzw , " cntlzw", }, 1267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_extsb , " extsb", }, 1268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_extsh , " extsh", }, 1269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_neg , " neg", }, 1270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nego , " nego", }, 1271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cntlzd , " cntlzd", }, 1273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_extsw , " extsw", }, 1274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_cntlzw_ (void) 1279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("cntlzw. 17, 14"); 1281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_extsb_ (void) 1284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("extsb. 17, 14"); 1286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_extsh_ (void) 1289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("extsh. 17, 14"); 1291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_neg_ (void) 1294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("neg. 17, 14"); 1296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nego_ (void) 1299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nego. 17, 14"); 1301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_cntlzd_ (void) 1305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("cntlzd. 17, 14"); 1307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_extsw_ (void) 1310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("extsw. 17, 14"); 1312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ilr_ops_one[] = { 1316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cntlzw_ , " cntlzw.", }, 1317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_extsb_ , " extsb.", }, 1318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_extsh_ , " extsh.", }, 1319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_neg_ , " neg.", }, 1320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nego_ , " nego.", }, 1321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_cntlzd_ , " cntlzd.", }, 1323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_extsw_ , " extsw.", }, 1324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rlwimi (void); 1329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rlwimi", "rlwimi 17, 14, 0, 0, 0"); 1330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rlwinm (void); 1332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rlwinm", "rlwinm 17, 14, 0, 0, 0"); 1333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rlwnm (void); 1335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rlwnm", "rlwnm 17, 14, 15, 0, 0"); 1336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_srawi (void); 1338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_srawi", "srawi 17, 14, 0"); 1339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mfcr (void) 1341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr 17"); 1343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mfspr (void) 1346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfspr 17, 1"); 1348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mtspr (void) 1351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtspr 1, 14"); 1353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldcl (void); 1357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldcl", "rldcl 17, 14, 15, 0"); 1358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldcr (void); 1360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldcr", "rldcr 17, 14, 15, 0"); 1361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldic (void); 1363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldic", "rldic 17, 14, 0, 0"); 1364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldicl (void); 1366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldicl", "rldicl 17, 14, 0, 0"); 1367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldicr (void); 1369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldicr", "rldicr 17, 14, 0, 0"); 1370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldimi (void); 1372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldimi", "rldimi 17, 14, 0, 0"); 1373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_sradi (void); 1375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_sradi", "sradi 17, 14, 0"); 1376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_il_ops_spe[] = { 1379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rlwimi , " rlwimi", }, 1380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rlwinm , " rlwinm", }, 1381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rlwnm , " rlwnm", }, 1382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_srawi , " srawi", }, 1383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mfcr , " mfcr", }, 1384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mfspr , " mfspr", }, 1385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mtspr , " mtspr", }, 1386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldcl , " rldcl", }, 1388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldcr , " rldcr", }, 1389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldic , " rldic", }, 1390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldicl , " rldicl", }, 1391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldicr , " rldicr", }, 1392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldimi , " rldimi", }, 1393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_sradi , " sradi", }, 1394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rlwimi_ (void); 1399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rlwimi_", "rlwimi. 17, 14, 0, 0, 0"); 1400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rlwinm_ (void); 1402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rlwinm_", "rlwinm. 17, 14, 0, 0, 0"); 1403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rlwnm_ (void); 1405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rlwnm_", "rlwnm. 17, 14, 15, 0, 0"); 1406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_srawi_ (void); 1408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_srawi_", "srawi. 17, 14, 0"); 1409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_mcrf (void); 1411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_mcrf", "mcrf 0, 0"); 1412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_mcrxr (void); 1414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_mcrxr", "mcrxr 0"); 1415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_mtcrf (void); 1417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_mtcrf", "mtcrf 0, 14"); 1418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldcl_ (void); 1421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldcl_", "rldcl. 17, 14, 15, 0"); 1422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldcr_ (void); 1424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldcr_", "rldcr. 17, 14, 15, 0"); 1425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldic_ (void); 1427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldic_", "rldic. 17, 14, 0, 0"); 1428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldicl_ (void); 1430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldicl_", "rldicl. 17, 14, 0, 0"); 1431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldicr_ (void); 1433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldicr_", "rldicr. 17, 14, 0, 0"); 1434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_rldimi_ (void); 1436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_rldimi_", "rldimi. 17, 14, 0, 0"); 1437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_sradi_ (void); 1439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_sradi_", "sradi. 17, 14, 0"); 1440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ilr_ops_spe[] = { 1443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rlwimi_ , " rlwimi.", }, 1444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rlwinm_ , " rlwinm.", }, 1445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rlwnm_ , " rlwnm.", }, 1446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_srawi_ , " srawi.", }, 1447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mcrf , " mcrf", }, 1448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mcrxr , " mcrxr", }, 1449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mtcrf , " mtcrf", }, 1450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldcl_ , " rldcl.", }, 1452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldcr_ , " rldcr.", }, 1453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldic_ , " rldic.", }, 1454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldicl_ , " rldicl.", }, 1455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldicr_ , " rldicr.", }, 1456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_rldimi_ , " rldimi.", }, 1457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_sradi_ , " sradi.", }, 1458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lbz (void); 1463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lbz", "lbz 17,0(14)"); 1464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lbzu (void); 1466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lbzu", "lbzu 17,0(14)"); 1467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lha (void); 1469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lha", "lha 17,0(14)"); 1470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lhau (void); 1472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lhau", "lhau 17,0(14)"); 1473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lhz (void); 1475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lhz", "lhz 17,0(14)"); 1476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lhzu (void); 1478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lhzu", "lhzu 17,0(14)"); 1479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lwz (void); 1481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lwz", "lwz 17,0(14)"); 1482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lwzu (void); 1484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lwzu", "lwzu 17,0(14)"); 1485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_ld (void); 1488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_ld", "ld 17,0(14)"); 1489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_ldu (void); 1491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_ldu", "ldu 17,0(14)"); 1492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lwa (void); 1494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lwa", "lwa 17,0(14)"); 1495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ild_ops_two_i16[] = { 1498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lbz , " lbz", }, 1499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lbzu , " lbzu", }, 1500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lha , " lha", }, 1501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lhau , " lhau", }, 1502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lhz , " lhz", }, 1503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lhzu , " lhzu", }, 1504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lwz , " lwz", }, 1505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lwzu , " lwzu", }, 1506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_ld , " ld", }, 1508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_ldu , " ldu", }, 1509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lwa , " lwa", }, 1510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lbzx (void) 1515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lbzx 17,14,15"); 1517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lbzux (void) 1520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lbzux 17,14,15"); 1522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lhax (void) 1525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lhax 17,14,15"); 1527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lhaux (void) 1530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lhaux 17,14,15"); 1532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lhzx (void) 1535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lhzx 17,14,15"); 1537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lhzux (void) 1540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lhzux 17,14,15"); 1542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lwzx (void) 1545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lwzx 17,14,15"); 1547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lwzux (void) 1550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lwzux 17,14,15"); 1552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_ldx (void) 1556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("ldx 17,14,15"); 1558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_ldux (void) 1561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("ldux 17,14,15"); 1563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lwax (void) 1566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lwax 17,14,15"); 1568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lwaux (void) 1571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lwaux 17,14,15"); 1573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ild_ops_two[] = { 1577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lbzx , " lbzx", }, 1578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lbzux , " lbzux", }, 1579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lhax , " lhax", }, 1580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lhaux , " lhaux", }, 1581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lhzx , " lhzx", }, 1582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lhzux , " lhzux", }, 1583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lwzx , " lwzx", }, 1584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lwzux , " lwzux", }, 1585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_ldx , " ldx", }, 1587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_ldux , " ldux", }, 1588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lwax , " lwax", }, 1589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lwaux , " lwaux", }, 1590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_stb (void); 1595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_stb", "stb 14,0(15)"); 1596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_stbu (void); 1598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_stbu", "stbu 14,0(15)"); 1599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_sth (void); 1601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_sth", "sth 14,0(15)"); 1602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_sthu (void); 1604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_sthu", "sthu 14,0(15)"); 1605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_stw (void); 1607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_stw", "stw 14,0(15)"); 1608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_stwu (void); 1610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_stwu", "stwu 14,0(15)"); 1611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_std (void); 1614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_std", "std 14,0(15)"); 1615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_stdu (void); 1617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_stdu", "stdu 14,0(15)"); 1618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ist_ops_three_i16[] = { 1621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stb , " stb", }, 1622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stbu , " stbu", }, 1623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_sth , " sth", }, 1624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_sthu , " sthu", }, 1625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stw , " stw", }, 1626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stwu , " stwu", }, 1627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_std , " std", }, 1629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stdu , " stdu", }, 1630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stbx (void) 1635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stbx 14,15,16"); 1637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stbux (void) 1640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stbux 14,15,16"); 1642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_sthx (void) 1645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("sthx 14,15,16"); 1647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_sthux (void) 1650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("sthux 14,15,16"); 1652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stwx (void) 1655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stwx 14,15,16"); 1657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stwux (void) 1660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stwux 14,15,16"); 1662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stdx (void) 1666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stdx 14,15,16"); 1668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stdux (void) 1671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stdux 14,15,16"); 1673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ist_ops_three[] = { 1677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stbx , " stbx", }, 1678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stbux , " stbux", }, 1679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_sthx , " sthx", }, 1680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_sthux , " sthux", }, 1681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stwx , " stwx", }, 1682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stwux , " stwux", }, 1683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 1684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stdx , " stdx", }, 1685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stdux , " stdux", }, 1686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 1687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1690663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void 1691663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtests_popcnt_one(void) 1692663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ 1693663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng __asm__ __volatile__ ("popcntb 17, 14"); 1694663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} 1695663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 1696663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic test_t tests_popcnt_ops_one[] = { 1697663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng { &tests_popcnt_one , " popcntb", }, 1698663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng { NULL, NULL, }, 1699663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}; 1700663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 1701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 1702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fsel (void) 1703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fsel 17, 14, 15, 16"); 1705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmadd (void) 1708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmadd 17, 14, 15, 16"); 1710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmadds (void) 1713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmadds 17, 14, 15, 16"); 1715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmsub (void) 1718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmsub 17, 14, 15, 16"); 1720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmsubs (void) 1723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmsubs 17, 14, 15, 16"); 1725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fnmadd (void) 1728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fnmadd 17, 14, 15, 16"); 1730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fnmadds (void) 1733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fnmadds 17, 14, 15, 16"); 1735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fnmsub (void) 1738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fnmsub 17, 14, 15, 16"); 1740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fnmsubs (void) 1743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fnmsubs 17, 14, 15, 16"); 1745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_fa_ops_three[] = { 1748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fsel , " fsel", }, 1749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmadd , " fmadd", }, 1750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmadds , " fmadds", }, 1751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmsub , " fmsub", }, 1752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmsubs , " fmsubs", }, 1753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fnmadd , " fnmadd", }, 1754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fnmadds , " fnmadds", }, 1755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fnmsub , " fnmsub", }, 1756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fnmsubs , " fnmsubs", }, 1757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 1760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 1762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fsel_ (void) 1763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fsel. 17, 14, 15, 16"); 1765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmadd_ (void) 1768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmadd. 17, 14, 15, 16"); 1770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmadds_ (void) 1773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmadds. 17, 14, 15, 16"); 1775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmsub_ (void) 1778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmsub. 17, 14, 15, 16"); 1780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmsubs_ (void) 1783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmsubs. 17, 14, 15, 16"); 1785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fnmadd_ (void) 1788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fnmadd. 17, 14, 15, 16"); 1790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fnmadds_ (void) 1793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fnmadds. 17, 14, 15, 16"); 1795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fnmsub_ (void) 1798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fnmsub. 17, 14, 15, 16"); 1800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fnmsubs_ (void) 1803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fnmsubs. 17, 14, 15, 16"); 1805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_far_ops_three[] = { 1808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fsel_ , " fsel.", }, 1809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmadd_ , " fmadd.", }, 1810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmadds_ , " fmadds.", }, 1811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmsub_ , " fmsub.", }, 1812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmsubs_ , " fmsubs.", }, 1813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fnmadd_ , " fnmadd.", }, 1814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fnmadds_ , " fnmadds.", }, 1815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fnmsub_ , " fnmsub.", }, 1816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fnmsubs_ , " fnmsubs.", }, 1817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 1820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 1822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fadd (void) 1823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fadd 17, 14, 15"); 1825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fadds (void) 1828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fadds 17, 14, 15"); 1830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fsub (void) 1833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fsub 17, 14, 15"); 1835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fsubs (void) 1838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fsubs 17, 14, 15"); 1840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmul (void) 1843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmul 17, 14, 15"); 1845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmuls (void) 1848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmuls 17, 14, 15"); 1850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fdiv (void) 1853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fdiv 17, 14, 15"); 1855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fdivs (void) 1858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fdivs 17, 14, 15"); 1860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_fa_ops_two[] = { 1863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fadd , " fadd", }, 1864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fadds , " fadds", }, 1865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fsub , " fsub", }, 1866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fsubs , " fsubs", }, 1867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmul , " fmul", }, 1868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmuls , " fmuls", }, 1869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fdiv , " fdiv", }, 1870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fdivs , " fdivs", }, 1871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 1874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 1876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fadd_ (void) 1877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fadd. 17, 14, 15"); 1879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fadds_ (void) 1882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fadds. 17, 14, 15"); 1884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fsub_ (void) 1887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fsub. 17, 14, 15"); 1889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fsubs_ (void) 1892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fsubs. 17, 14, 15"); 1894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmul_ (void) 1897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmul. 17, 14, 15"); 1899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmuls_ (void) 1902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmuls. 17, 14, 15"); 1904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fdiv_ (void) 1907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fdiv. 17, 14, 15"); 1909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fdivs_ (void) 1912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fdivs. 17, 14, 15"); 1914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_far_ops_two[] = { 1917ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fadd_ , " fadd.", }, 1918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fadds_ , " fadds.", }, 1919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fsub_ , " fsub.", }, 1920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fsubs_ , " fsubs.", }, 1921ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmul_ , " fmul.", }, 1922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmuls_ , " fmuls.", }, 1923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fdiv_ , " fdiv.", }, 1924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fdivs_ , " fdivs.", }, 1925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 1928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 1930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fcmpo (void) 1931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fcmpo 2, 14, 15"); 1933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1935ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fcmpu (void) 1936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fcmpu 2, 14, 15"); 1938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_fcr_ops_two[] = { 1941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fcmpo , " fcmpo", }, 1942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fcmpu , " fcmpu", }, 1943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 1944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 1945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 1946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 1948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1949ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fres (void) 1950ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1951ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fres 17, 14"); 1952ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1953ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1954ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_frsqrte (void) 1955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("frsqrte 17, 14"); 1957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_frsp (void) 1960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("frsp 17, 14"); 1962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fctiw (void) 1965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fctiw 17, 14"); 1967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fctiwz (void) 1970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fctiwz 17, 14"); 1972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmr (void) 1975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmr 17, 14"); 1977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1979ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fneg (void) 1980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fneg 17, 14"); 1982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1983ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1984ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fabs (void) 1985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fabs 17, 14"); 1987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fnabs (void) 1990ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fnabs 17, 14"); 1992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fsqrt (void) 1995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 1996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fsqrt 17, 14"); 1997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 1998ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 1999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 2000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fcfid (void) 2001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fcfid 17, 14"); 2003ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fctid (void) 2006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fctid 17, 14"); 2008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fctidz (void) 2011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fctidz 17, 14"); 2013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 2015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_fa_ops_one[] = { 2017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov { &test_fres , " fres", }, 2018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov { &test_frsqrte , " frsqrte", }, 2019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_frsp , " frsp", }, 2020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fctiw , " fctiw", }, 2021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fctiwz , " fctiwz", }, 2022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmr , " fmr", }, 2023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fneg , " fneg", }, 2024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fabs , " fabs", }, 2025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fnabs , " fnabs", }, 2026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fsqrt , " fsqrt", }, 2027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 2028ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fcfid , " fcfid", }, 2029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fctid , " fctid", }, 2030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fctidz , " fctidz", }, 2031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 2032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 2035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 2037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fres_ (void) 2039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fres. 17, 14"); 2041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_frsqrte_ (void) 2044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2045663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng __asm__ __volatile__ ("frsqrte. 17, 14"); 2046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2048ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_frsp_ (void) 2049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2050ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("frsp. 17, 14"); 2051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2052ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2053ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fctiw_ (void) 2054ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fctiw. 17, 14"); 2056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fctiwz_ (void) 2059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fctiwz. 17, 14"); 2061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fmr_ (void) 2064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fmr. 17, 14"); 2066ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2068ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fneg_ (void) 2069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fneg. 17, 14"); 2071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fabs_ (void) 2074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2075ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fabs. 17, 14"); 2076ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2077ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2078ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fnabs_ (void) 2079ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2080ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fnabs. 17, 14"); 2081ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2082ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2083ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 2084ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fcfid_ (void) 2085ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2086ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fcfid. 17, 14"); 2087ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2088ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2089ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fctid_ (void) 2090ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2091ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fctid. 17, 14"); 2092ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2093ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2094ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_fctidz_ (void) 2095ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2096ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("fctidz. 17, 14"); 2097ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2098ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 2099ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_far_ops_one[] = { 2101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov { &test_fres_ , " fres.", }, 2102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov { &test_frsqrte_ , " frsqrte.", }, 2103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_frsp_ , " frsp.", }, 2104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fctiw_ , " fctiw.", }, 2105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fctiwz_ , " fctiwz.", }, 2106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fmr_ , " fmr.", }, 2107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fneg_ , " fneg.", }, 2108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fabs_ , " fabs.", }, 2109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fnabs_ , " fnabs.", }, 2110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 2111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fcfid_ , " fcfid.", }, 2112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fctid_ , " fctid.", }, 2113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_fctidz_ , " fctidz.", }, 2114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 2115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 2118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 2120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_fl_ops_spe[] = { 2121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 2124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 2126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_flr_ops_spe[] = { 2127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 2130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 2133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lfs (void); 2134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lfs", "lfs 17,0(14)"); 2135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lfsu (void); 2137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lfsu", "lfsu 17,0(14)"); 2138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lfd (void); 2140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lfd", "lfd 17,0(14)"); 2141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_lfdu (void); 2143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_lfdu", "lfdu 17,0(14)"); 2144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_fld_ops_two_i16[] = { 2146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lfs , " lfs", }, 2147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lfsu , " lfsu", }, 2148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lfd , " lfd", }, 2149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lfdu , " lfdu", }, 2150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 2153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 2155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lfsx (void) 2156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lfsx 17,14,15"); 2158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lfsux (void) 2161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lfsux 17,14,15"); 2163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lfdx (void) 2166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lfdx 17,14,15"); 2168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lfdux (void) 2171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lfdux 17,14,15"); 2173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_fld_ops_two[] = { 2176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lfsx , " lfsx", }, 2177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lfsux , " lfsux", }, 2178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lfdx , " lfdx", }, 2179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lfdux , " lfdux", }, 2180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 2183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 2185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_stfs (void); 2186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_stfs", "stfs 14,0(15)"); 2187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_stfsu (void); 2189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_stfsu", "stfsu 14,0(15)"); 2190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_stfd (void); 2192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_stfd", "stfd 14,0(15)"); 2193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_stfdu (void); 2195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_stfdu", "stfdu 14,0(15)"); 2196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_fst_ops_three_i16[] = { 2198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stfs , " stfs", }, 2199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stfsu , " stfsu", }, 2200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stfd , " stfd", }, 2201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stfdu , " stfdu", }, 2202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 2205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 2207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stfsx (void) 2208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stfsx 14,15,16"); 2210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stfsux (void) 2213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stfsux 14,15,16"); 2215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stfdx (void) 2218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stfdx 14,15,16"); 2220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stfdux (void) 2223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stfdux 14,15,16"); 2225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_fst_ops_three[] = { 2228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stfsx , " stfsx", }, 2229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stfsux , " stfsux", }, 2230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stfdx , " stfdx", }, 2231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stfdux , " stfdux", }, 2232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 2235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 2238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmhaddshs (void) 2239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmhaddshs 17, 14, 15, 16"); 2241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmhraddshs (void) 2244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmhraddshs 17, 14, 15, 16"); 2246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmladduhm (void) 2249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmladduhm 17, 14, 15, 16"); 2251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmsumubm (void) 2254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmsumubm 17, 14, 15, 16"); 2256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmsumuhm (void) 2259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmsumuhm 17, 14, 15, 16"); 2261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmsumshs (void) 2264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmsumshs 17, 14, 15, 16"); 2266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmsumuhs (void) 2269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmsumuhs 17, 14, 15, 16"); 2271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmsummbm (void) 2274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmsummbm 17, 14, 15, 16"); 2276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmsumshm (void) 2279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmsumshm 17, 14, 15, 16"); 2281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_aa_ops_three[] = { 2284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmhaddshs , " vmhaddshs", }, 2285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmhraddshs , " vmhraddshs", }, 2286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmladduhm , " vmladduhm", }, 2287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmsumubm , " vmsumubm", }, 2288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmsumuhm , " vmsumuhm", }, 2289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmsumshs , " vmsumshs", }, 2290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmsumuhs , " vmsumuhs", }, 2291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmsummbm , " vmsummbm", }, 2292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmsumshm , " vmsumshm", }, 2293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 2296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 2298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vperm (void) 2299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vperm 17, 14, 15, 16"); 2301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsel (void) 2304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsel 17, 14, 15, 16"); 2306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_al_ops_three[] = { 2309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vperm , " vperm", }, 2310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsel , " vsel", }, 2311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 2314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 2316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vaddubm (void) 2317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vaddubm 17, 14, 15"); 2319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vadduhm (void) 2322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vadduhm 17, 14, 15"); 2324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vadduwm (void) 2327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vadduwm 17, 14, 15"); 2329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vaddubs (void) 2332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vaddubs 17, 14, 15"); 2334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vadduhs (void) 2337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vadduhs 17, 14, 15"); 2339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vadduws (void) 2342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vadduws 17, 14, 15"); 2344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vaddsbs (void) 2347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vaddsbs 17, 14, 15"); 2349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vaddshs (void) 2352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vaddshs 17, 14, 15"); 2354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vaddsws (void) 2357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vaddsws 17, 14, 15"); 2359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vaddcuw (void) 2362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vaddcuw 17, 14, 15"); 2364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsububm (void) 2367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsububm 17, 14, 15"); 2369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsubuhm (void) 2372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsubuhm 17, 14, 15"); 2374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsubuwm (void) 2377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsubuwm 17, 14, 15"); 2379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsububs (void) 2382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsububs 17, 14, 15"); 2384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsubuhs (void) 2387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsubuhs 17, 14, 15"); 2389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsubuws (void) 2392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsubuws 17, 14, 15"); 2394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsubsbs (void) 2397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsubsbs 17, 14, 15"); 2399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsubshs (void) 2402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsubshs 17, 14, 15"); 2404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsubsws (void) 2407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsubsws 17, 14, 15"); 2409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsubcuw (void) 2412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsubcuw 17, 14, 15"); 2414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmuloub (void) 2417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmuloub 17, 14, 15"); 2419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmulouh (void) 2422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmulouh 17, 14, 15"); 2424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmulosb (void) 2427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmulosb 17, 14, 15"); 2429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmulosh (void) 2432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmulosh 17, 14, 15"); 2434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmuleub (void) 2437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmuleub 17, 14, 15"); 2439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmuleuh (void) 2442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmuleuh 17, 14, 15"); 2444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmulesb (void) 2447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmulesb 17, 14, 15"); 2449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmulesh (void) 2452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmulesh 17, 14, 15"); 2454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsumsws (void) 2457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsumsws 17, 14, 15"); 2459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsum2sws (void) 2462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsum2sws 17, 14, 15"); 2464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsum4ubs (void) 2467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsum4ubs 17, 14, 15"); 2469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsum4sbs (void) 2472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsum4sbs 17, 14, 15"); 2474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsum4shs (void) 2477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsum4shs 17, 14, 15"); 2479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vavgub (void) 2482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vavgub 17, 14, 15"); 2484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vavguh (void) 2487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vavguh 17, 14, 15"); 2489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vavguw (void) 2492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vavguw 17, 14, 15"); 2494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vavgsb (void) 2497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vavgsb 17, 14, 15"); 2499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vavgsh (void) 2502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vavgsh 17, 14, 15"); 2504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vavgsw (void) 2507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vavgsw 17, 14, 15"); 2509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmaxub (void) 2512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmaxub 17, 14, 15"); 2514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmaxuh (void) 2517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmaxuh 17, 14, 15"); 2519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmaxuw (void) 2522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmaxuw 17, 14, 15"); 2524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmaxsb (void) 2527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmaxsb 17, 14, 15"); 2529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmaxsh (void) 2532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmaxsh 17, 14, 15"); 2534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmaxsw (void) 2537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmaxsw 17, 14, 15"); 2539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vminub (void) 2542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vminub 17, 14, 15"); 2544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vminuh (void) 2547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vminuh 17, 14, 15"); 2549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vminuw (void) 2552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vminuw 17, 14, 15"); 2554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vminsb (void) 2557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vminsb 17, 14, 15"); 2559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vminsh (void) 2562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vminsh 17, 14, 15"); 2564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vminsw (void) 2567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vminsw 17, 14, 15"); 2569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_aa_ops_two[] = { 2572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vaddubm , " vaddubm", }, 2573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vadduhm , " vadduhm", }, 2574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vadduwm , " vadduwm", }, 2575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vaddubs , " vaddubs", }, 2576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vadduhs , " vadduhs", }, 2577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vadduws , " vadduws", }, 2578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vaddsbs , " vaddsbs", }, 2579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vaddshs , " vaddshs", }, 2580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vaddsws , " vaddsws", }, 2581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vaddcuw , " vaddcuw", }, 2582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsububm , " vsububm", }, 2583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsubuhm , " vsubuhm", }, 2584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsubuwm , " vsubuwm", }, 2585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsububs , " vsububs", }, 2586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsubuhs , " vsubuhs", }, 2587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsubuws , " vsubuws", }, 2588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsubsbs , " vsubsbs", }, 2589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsubshs , " vsubshs", }, 2590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsubsws , " vsubsws", }, 2591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsubcuw , " vsubcuw", }, 2592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmuloub , " vmuloub", }, 2593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmulouh , " vmulouh", }, 2594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmulosb , " vmulosb", }, 2595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmulosh , " vmulosh", }, 2596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmuleub , " vmuleub", }, 2597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmuleuh , " vmuleuh", }, 2598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmulesb , " vmulesb", }, 2599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmulesh , " vmulesh", }, 2600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsumsws , " vsumsws", }, 2601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsum2sws , " vsum2sws", }, 2602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsum4ubs , " vsum4ubs", }, 2603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsum4sbs , " vsum4sbs", }, 2604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsum4shs , " vsum4shs", }, 2605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vavgub , " vavgub", }, 2606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vavguh , " vavguh", }, 2607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vavguw , " vavguw", }, 2608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vavgsb , " vavgsb", }, 2609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vavgsh , " vavgsh", }, 2610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vavgsw , " vavgsw", }, 2611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmaxub , " vmaxub", }, 2612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmaxuh , " vmaxuh", }, 2613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmaxuw , " vmaxuw", }, 2614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmaxsb , " vmaxsb", }, 2615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmaxsh , " vmaxsh", }, 2616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmaxsw , " vmaxsw", }, 2617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vminub , " vminub", }, 2618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vminuh , " vminuh", }, 2619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vminuw , " vminuw", }, 2620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vminsb , " vminsb", }, 2621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vminsh , " vminsh", }, 2622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vminsw , " vminsw", }, 2623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 2626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 2628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vand (void) 2629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vand 17, 14, 15"); 2631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vor (void) 2634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor 17, 14, 15"); 2636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vxor (void) 2639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vxor 17, 14, 15"); 2641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vandc (void) 2644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vandc 17, 14, 15"); 2646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vnor (void) 2649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vnor 17, 14, 15"); 2651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vrlb (void) 2654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vrlb 17, 14, 15"); 2656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vrlh (void) 2659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vrlh 17, 14, 15"); 2661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vrlw (void) 2664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vrlw 17, 14, 15"); 2666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vslb (void) 2669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vslb 17, 14, 15"); 2671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vslh (void) 2674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vslh 17, 14, 15"); 2676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vslw (void) 2679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vslw 17, 14, 15"); 2681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsrb (void) 2684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsrb 17, 14, 15"); 2686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsrh (void) 2689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsrh 17, 14, 15"); 2691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsrw (void) 2694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsrw 17, 14, 15"); 2696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsrab (void) 2699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsrab 17, 14, 15"); 2701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsrah (void) 2704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsrah 17, 14, 15"); 2706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsraw (void) 2709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsraw 17, 14, 15"); 2711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vpkuhum (void) 2714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vpkuhum 17, 14, 15"); 2716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vpkuwum (void) 2719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vpkuwum 17, 14, 15"); 2721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vpkuhus (void) 2724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vpkuhus 17, 14, 15"); 2726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vpkuwus (void) 2729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vpkuwus 17, 14, 15"); 2731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vpkshus (void) 2734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vpkshus 17, 14, 15"); 2736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vpkswus (void) 2739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vpkswus 17, 14, 15"); 2741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vpkshss (void) 2744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vpkshss 17, 14, 15"); 2746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vpkswss (void) 2749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vpkswss 17, 14, 15"); 2751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vpkpx (void) 2754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vpkpx 17, 14, 15"); 2756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmrghb (void) 2759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmrghb 17, 14, 15"); 2761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmrghh (void) 2764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmrghh 17, 14, 15"); 2766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmrghw (void) 2769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmrghw 17, 14, 15"); 2771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmrglb (void) 2774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmrglb 17, 14, 15"); 2776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmrglh (void) 2779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmrglh 17, 14, 15"); 2781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmrglw (void) 2784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmrglw 17, 14, 15"); 2786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vslo (void) 2789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vslo 17, 14, 15"); 2791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsro (void) 2794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsro 17, 14, 15"); 2796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_al_ops_two[] = { 2799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vand , " vand", }, 2800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vor , " vor", }, 2801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vxor , " vxor", }, 2802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vandc , " vandc", }, 2803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vnor , " vnor", }, 2804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vrlb , " vrlb", }, 2805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vrlh , " vrlh", }, 2806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vrlw , " vrlw", }, 2807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vslb , " vslb", }, 2808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vslh , " vslh", }, 2809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vslw , " vslw", }, 2810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsrb , " vsrb", }, 2811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsrh , " vsrh", }, 2812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsrw , " vsrw", }, 2813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsrab , " vsrab", }, 2814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsrah , " vsrah", }, 2815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsraw , " vsraw", }, 2816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vpkuhum , " vpkuhum", }, 2817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vpkuwum , " vpkuwum", }, 2818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vpkuhus , " vpkuhus", }, 2819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vpkuwus , " vpkuwus", }, 2820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vpkshus , " vpkshus", }, 2821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vpkswus , " vpkswus", }, 2822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vpkshss , " vpkshss", }, 2823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vpkswss , " vpkswss", }, 2824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vpkpx , " vpkpx", }, 2825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmrghb , " vmrghb", }, 2826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmrghh , " vmrghh", }, 2827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmrghw , " vmrghw", }, 2828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmrglb , " vmrglb", }, 2829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmrglh , " vmrglh", }, 2830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmrglw , " vmrglw", }, 2831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vslo , " vslo", }, 2832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsro , " vsro", }, 2833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 2836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 2838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vupkhsb (void) 2839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vupkhsb 17, 14"); 2841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vupkhsh (void) 2844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vupkhsh 17, 14"); 2846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vupkhpx (void) 2849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vupkhpx 17, 14"); 2851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vupklsb (void) 2854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vupklsb 17, 14"); 2856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vupklsh (void) 2859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vupklsh 17, 14"); 2861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vupklpx (void) 2864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vupklpx 17, 14"); 2866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_al_ops_one[] = { 2869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vupkhsb , " vupkhsb", }, 2870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vupkhsh , " vupkhsh", }, 2871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vupkhpx , " vupkhpx", }, 2872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vupklsb , " vupklsb", }, 2873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vupklsh , " vupklsh", }, 2874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vupklpx , " vupklpx", }, 2875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 2878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 2880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtub (void) 2881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtub 17, 14, 15"); 2883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtuh (void) 2886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtuh 17, 14, 15"); 2888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtuw (void) 2891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtuw 17, 14, 15"); 2893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtsb (void) 2896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtsb 17, 14, 15"); 2898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtsh (void) 2901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtsh 17, 14, 15"); 2903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtsw (void) 2906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtsw 17, 14, 15"); 2908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpequb (void) 2911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpequb 17, 14, 15"); 2913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpequh (void) 2916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2917ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpequh 17, 14, 15"); 2918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpequw (void) 2921ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpequw 17, 14, 15"); 2923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ac_ops_two[] = { 2926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtub , " vcmpgtub", }, 2927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtuh , " vcmpgtuh", }, 2928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtuw , " vcmpgtuw", }, 2929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtsb , " vcmpgtsb", }, 2930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtsh , " vcmpgtsh", }, 2931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtsw , " vcmpgtsw", }, 2932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpequb , " vcmpequb", }, 2933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpequh , " vcmpequh", }, 2934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpequw , " vcmpequw", }, 2935ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 2938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 2940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtub_ (void) 2941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtub. 17, 14, 15"); 2943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtuh_ (void) 2946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtuh. 17, 14, 15"); 2948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2949ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2950ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtuw_ (void) 2951ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2952ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtuw. 17, 14, 15"); 2953ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2954ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtsb_ (void) 2956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtsb. 17, 14, 15"); 2958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtsh_ (void) 2961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtsh. 17, 14, 15"); 2963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtsw_ (void) 2966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtsw. 17, 14, 15"); 2968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpequb_ (void) 2971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpequb. 17, 14, 15"); 2973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpequh_ (void) 2976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpequh. 17, 14, 15"); 2978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2979ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpequw_ (void) 2981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 2982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpequw. 17, 14, 15"); 2983ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 2984ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_acr_ops_two[] = { 2986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtub_ , " vcmpgtub.", }, 2987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtuh_ , " vcmpgtuh.", }, 2988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtuw_ , " vcmpgtuw.", }, 2989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtsb_ , " vcmpgtsb.", }, 2990ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtsh_ , " vcmpgtsh.", }, 2991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtsw_ , " vcmpgtsw.", }, 2992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpequb_ , " vcmpequb.", }, 2993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpequh_ , " vcmpequh.", }, 2994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpequw_ , " vcmpequw.", }, 2995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 2996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 2997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 2998ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 3000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsl (void) 3001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsl 17, 14, 15"); 3003ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsr (void) 3006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsr 17, 14, 15"); 3008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_vspltb (void); 3011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_vspltb", "vspltb 17, 14, 0"); 3012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_vsplth (void); 3014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_vsplth", "vsplth 17, 14, 0"); 3015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_vspltw (void); 3017ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_vspltw", "vspltw 17, 14, 0"); 3018ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_vspltisb (void); 3020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_vspltisb", "vspltisb 17, 0"); 3021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_vspltish (void); 3023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_vspltish", "vspltish 17, 0"); 3024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_vspltisw (void); 3026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_vspltisw", "vspltisw 17, 0"); 3027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3028ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_vsldoi (void); 3029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_vsldoi", "vsldoi 17, 14, 15, 0"); 3030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lvsl (void) 3032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lvsl 17, 14, 15"); 3034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lvsr (void) 3037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lvsr 17, 14, 15"); 3039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_av_int_ops_spe[] = { 3042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsl , " vsl", }, 3043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsr , " vsr", }, 3044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vspltb , " vspltb", }, 3045ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsplth , " vsplth", }, 3046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vspltw , " vspltw", }, 3047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vspltisb , " vspltisb", }, 3048ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vspltish , " vspltish", }, 3049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vspltisw , " vspltisw", }, 3050ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsldoi , " vsldoi", }, 3051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lvsl , " lvsl", }, 3052ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lvsr , " lvsr", }, 3053ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 3054ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 3055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 3056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 3058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lvebx (void) 3059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lvebx 17,14,15"); 3061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lvehx (void) 3064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lvehx 17,14,15"); 3066ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3068ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lvewx (void) 3069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lvewx 17,14,15"); 3071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lvx (void) 3074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3075ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lvx 17,14,15"); 3076ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3077ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3078ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_lvxl (void) 3079ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3080ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("lvxl 17,14,15"); 3081ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3082ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3083ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ald_ops_two[] = { 3084ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lvebx , " lvebx", }, 3085ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lvehx , " lvehx", }, 3086ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lvewx , " lvewx", }, 3087ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lvx , " lvx", }, 3088ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_lvxl , " lvxl", }, 3089ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 3090ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 3091ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 3092ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3093ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 3094ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stvebx (void) 3095ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3096ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stvebx 14,15,16"); 3097ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3098ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3099ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stvehx (void) 3100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stvehx 14,15,16"); 3102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stvewx (void) 3105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stvewx 14,15,16"); 3107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stvx (void) 3110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stvx 14,15,16"); 3112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_stvxl (void) 3115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("stvxl 14,15,16"); 3117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_ast_ops_three[] = { 3120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stvebx , " stvebx", }, 3121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stvehx , " stvehx", }, 3122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stvewx , " stvewx", }, 3123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stvx , " stvx", }, 3124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_stvxl , " stvxl", }, 3125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 3126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 3127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 3128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 3130663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#if 1 3131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmaddfp (void) 3132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmaddfp 17, 14, 15, 16"); 3134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vnmsubfp (void) 3137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vnmsubfp 17, 14, 15, 16"); 3139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 3141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_afa_ops_three[] = { 3143663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng { &test_vmaddfp , " vmaddfp", }, 3144663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng { &test_vnmsubfp , " vnmsubfp", }, 3145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 3146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 3147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 3148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 3150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vaddfp (void) 3151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vaddfp 17, 14, 15"); 3153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vsubfp (void) 3156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vsubfp 17, 14, 15"); 3158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vmaxfp (void) 3161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vmaxfp 17, 14, 15"); 3163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vminfp (void) 3166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vminfp 17, 14, 15"); 3168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_afa_ops_two[] = { 3171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vaddfp , " vaddfp", }, 3172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vsubfp , " vsubfp", }, 3173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vmaxfp , " vmaxfp", }, 3174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vminfp , " vminfp", }, 3175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 3176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 3177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 3178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 3180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vrfin (void) 3181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vrfin 17, 14"); 3183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vrfiz (void) 3186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vrfiz 17, 14"); 3188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vrfip (void) 3191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vrfip 17, 14"); 3193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vrfim (void) 3196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vrfim 17, 14"); 3198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vrefp (void) 3201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vrefp 17, 14"); 3203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vrsqrtefp (void) 3206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vrsqrtefp 17, 14"); 3208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0 // TODO: Not yet supported 3211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vlogefp (void) 3212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vlogefp 17, 14"); 3214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vexptefp (void) 3217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vexptefp 17, 14"); 3219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 3221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_afa_ops_one[] = { 3223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vrfin , " vrfin", }, 3224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vrfiz , " vrfiz", }, 3225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vrfip , " vrfip", }, 3226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vrfim , " vrfim", }, 3227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vrefp , " vrefp", }, 3228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vrsqrtefp , " vrsqrtefp", }, 3229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // { &test_vlogefp , " vlogefp", }, // TODO: Not yet supported 3230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // { &test_vexptefp , " vexptefp", }, // TODO: Not yet supported 3231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 3232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 3233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 3234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 3236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtfp (void) 3237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtfp 17, 14, 15"); 3239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpeqfp (void) 3242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpeqfp 17, 14, 15"); 3244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgefp (void) 3247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgefp 17, 14, 15"); 3249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpbfp (void) 3252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpbfp 17, 14, 15"); 3254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_afc_ops_two[] = { 3257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtfp , " vcmpgtfp", }, 3258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpeqfp , " vcmpeqfp", }, 3259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgefp , " vcmpgefp", }, 3260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpbfp , " vcmpbfp", }, 3261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 3262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 3263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 3264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 3266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgtfp_ (void) 3267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgtfp. 17, 14, 15"); 3269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpeqfp_ (void) 3272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpeqfp. 17, 14, 15"); 3274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpgefp_ (void) 3277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpgefp. 17, 14, 15"); 3279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_vcmpbfp_ (void) 3282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vcmpbfp. 17, 14, 15"); 3284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_afcr_ops_two[] = { 3287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgtfp_ , " vcmpgtfp.", }, 3288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpeqfp_ , " vcmpeqfp.", }, 3289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpgefp_ , " vcmpgefp.", }, 3290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcmpbfp_ , " vcmpbfp.", }, 3291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 3292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 3293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 3294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 3296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_vcfux (void); 3297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_vcfux", "vcfux 17, 14, 0"); 3298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_vcfsx (void); 3300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_vcfsx", "vcfsx 17, 14, 0"); 3301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_vctuxs (void); 3303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_vctuxs", "vctuxs 17, 14, 0"); 3304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void test_vctsxs (void); 3306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownASSEMBLY_FUNC("test_vctsxs", "vctsxs 17, 14, 0"); 3307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_av_float_ops_spe[] = { 3309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcfux , " vcfux", }, 3310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vcfsx , " vcfsx", }, 3311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vctuxs , " vctuxs", }, 3312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_vctsxs , " vctsxs", }, 3313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 3314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 3315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 3316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (IS_PPC405) 3318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchw (void) 3319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchw 17, 14, 15"); 3321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwo (void) 3324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwo 17, 14, 15"); 3326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchws (void) 3329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchws 17, 14, 15"); 3331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwso (void) 3334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwso 17, 14, 15"); 3336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwsu (void) 3339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwsu 17, 14, 15"); 3341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwsuo (void) 3344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwsuo 17, 14, 15"); 3346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwu (void) 3349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwu 17, 14, 15"); 3351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwuo (void) 3354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwuo 17, 14, 15"); 3356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhw (void) 3359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhw 17, 14, 15"); 3361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwo (void) 3364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwo 17, 14, 15"); 3366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhws (void) 3369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhws 17, 14, 15"); 3371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwso (void) 3374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwso 17, 14, 15"); 3376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwsu (void) 3379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwsu 17, 14, 15"); 3381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwsuo (void) 3384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwsuo 17, 14, 15"); 3386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwu (void) 3389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwu 17, 14, 15"); 3391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwuo (void) 3394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwuo 17, 14, 15"); 3396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhw (void) 3399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhw 17, 14, 15"); 3401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwo (void) 3404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwo 17, 14, 15"); 3406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhws (void) 3409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhws 17, 14, 15"); 3411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwso (void) 3414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwso 17, 14, 15"); 3416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwsu (void) 3419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwsu 17, 14, 15"); 3421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwsuo (void) 3424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwsuo 17, 14, 15"); 3426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwu (void) 3429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwu 17, 14, 15"); 3431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwuo (void) 3434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwuo 17, 14, 15"); 3436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulchw (void) 3439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulchw 17, 14, 15"); 3441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulchwu (void) 3444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulchwu 17, 14, 15"); 3446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhhw (void) 3449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhhw 17, 14, 15"); 3451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhhwu (void) 3454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhhwu 17, 14, 15"); 3456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mullhw (void) 3459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mullhw 17, 14, 15"); 3461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mullhwu (void) 3464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mullhwu 17, 14, 15"); 3466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmacchw (void) 3469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmacchw 17, 14, 15"); 3471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmacchwo (void) 3474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmacchwo 17, 14, 15"); 3476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmacchws (void) 3479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmacchws 17, 14, 15"); 3481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmacchwso (void) 3484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmacchwso 17, 14, 15"); 3486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmachhw (void) 3489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmachhw 17, 14, 15"); 3491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmachhwo (void) 3494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmachhwo 17, 14, 15"); 3496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmachhws (void) 3499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmachhws 17, 14, 15"); 3501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmachhwso (void) 3504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmachhwso 17, 14, 15"); 3506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmaclhw (void) 3509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmaclhw 17, 14, 15"); 3511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmaclhwo (void) 3514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmaclhwo 17, 14, 15"); 3516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmaclhws (void) 3519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmaclhws 17, 14, 15"); 3521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmaclhwso (void) 3524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmaclhwso 17, 14, 15"); 3526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_p4m_ops_two[] = { 3529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchw , " macchw", }, 3530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwo , " macchwo", }, 3531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchws , " macchws", }, 3532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwso , " macchwso", }, 3533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwsu , " macchwsu", }, 3534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwsuo , " macchwsuo", }, 3535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwu , " macchwu", }, 3536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwuo , " macchwuo", }, 3537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhw , " machhw", }, 3538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwo , " machhwo", }, 3539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhws , " machhws", }, 3540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwso , " machhwso", }, 3541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwsu , " machhwsu", }, 3542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwsuo , " machhwsuo", }, 3543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwu , " machhwu", }, 3544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwuo , " machhwuo", }, 3545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhw , " maclhw", }, 3546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwo , " maclhwo", }, 3547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhws , " maclhws", }, 3548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwso , " maclhwso", }, 3549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwsu , " maclhwsu", }, 3550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwsuo , " maclhwsuo", }, 3551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwu , " maclhwu", }, 3552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwuo , " maclhwuo", }, 3553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulchw , " mulchw", }, 3554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulchwu , " mulchwu", }, 3555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhhw , " mulhhw", }, 3556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhhwu , " mulhhwu", }, 3557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mullhw , " mullhw", }, 3558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mullhwu , " mullhwu", }, 3559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmacchw , " nmacchw", }, 3560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmacchwo , " nmacchwo", }, 3561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmacchws , " nmacchws", }, 3562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmacchwso , " nmacchwso", }, 3563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmachhw , " nmachhw", }, 3564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmachhwo , " nmachhwo", }, 3565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmachhws , " nmachhws", }, 3566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmachhwso , " nmachhwso", }, 3567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmaclhw , " nmaclhw", }, 3568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmaclhwo , " nmaclhwo", }, 3569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmaclhws , " nmaclhws", }, 3570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmaclhwso , " nmaclhwso", }, 3571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 3572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 3573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (IS_PPC405) */ 3574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (IS_PPC405) 3576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchw_ (void) 3577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchw. 17, 14, 15"); 3579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwo_ (void) 3582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwo. 17, 14, 15"); 3584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchws_ (void) 3587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchws. 17, 14, 15"); 3589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwso_ (void) 3592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwso. 17, 14, 15"); 3594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwsu_ (void) 3597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwsu. 17, 14, 15"); 3599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwsuo_ (void) 3602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwsuo. 17, 14, 15"); 3604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwu_ (void) 3607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwu. 17, 14, 15"); 3609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_macchwuo_ (void) 3612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("macchwuo. 17, 14, 15"); 3614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhw_ (void) 3617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhw. 17, 14, 15"); 3619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwo_ (void) 3622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwo. 17, 14, 15"); 3624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhws_ (void) 3627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhws. 17, 14, 15"); 3629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwso_ (void) 3632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwso. 17, 14, 15"); 3634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwsu_ (void) 3637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwsu. 17, 14, 15"); 3639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwsuo_ (void) 3642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwsuo. 17, 14, 15"); 3644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwu_ (void) 3647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwu. 17, 14, 15"); 3649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_machhwuo_ (void) 3652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("machhwuo. 17, 14, 15"); 3654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhw_ (void) 3657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhw. 17, 14, 15"); 3659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwo_ (void) 3662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwo. 17, 14, 15"); 3664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhws_ (void) 3667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhws. 17, 14, 15"); 3669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwso_ (void) 3672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwso. 17, 14, 15"); 3674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwsu_ (void) 3677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwsu. 17, 14, 15"); 3679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwsuo_ (void) 3682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwsuo. 17, 14, 15"); 3684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwu_ (void) 3687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwu. 17, 14, 15"); 3689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_maclhwuo_ (void) 3692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("maclhwuo. 17, 14, 15"); 3694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulchw_ (void) 3697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulchw. 17, 14, 15"); 3699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulchwu_ (void) 3702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulchwu. 17, 14, 15"); 3704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhhw_ (void) 3707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhhw. 17, 14, 15"); 3709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mulhhwu_ (void) 3712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mulhhwu. 17, 14, 15"); 3714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mullhw_ (void) 3717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mullhw. 17, 14, 15"); 3719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_mullhwu_ (void) 3722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mullhwu. 17, 14, 15"); 3724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmacchw_ (void) 3727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmacchw. 17, 14, 15"); 3729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmacchwo_ (void) 3732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmacchwo. 17, 14, 15"); 3734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmacchws_ (void) 3737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmacchws. 17, 14, 15"); 3739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmacchwso_ (void) 3742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmacchwso. 17, 14, 15"); 3744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmachhw_ (void) 3747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmachhw. 17, 14, 15"); 3749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmachhwo_ (void) 3752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmachhwo. 17, 14, 15"); 3754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmachhws_ (void) 3757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmachhws. 17, 14, 15"); 3759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmachhwso_ (void) 3762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmachhwso. 17, 14, 15"); 3764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmaclhw_ (void) 3767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmaclhw. 17, 14, 15"); 3769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmaclhwo_ (void) 3772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmaclhwo. 17, 14, 15"); 3774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmaclhws_ (void) 3777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmaclhws. 17, 14, 15"); 3779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_nmaclhwso_ (void) 3782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 3783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("nmaclhwso. 17, 14, 15"); 3784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 3785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_t tests_p4mc_ops_two[] = { 3787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchw_ , " macchw.", }, 3788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwo_ , " macchwo.", }, 3789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchws_ , " macchws.", }, 3790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwso_ , " macchwso.", }, 3791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwsu_ , " macchwsu.", }, 3792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwsuo_ , " macchwsuo.", }, 3793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwu_ , " macchwu.", }, 3794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_macchwuo_ , " macchwuo.", }, 3795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhw_ , " machhw.", }, 3796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwo_ , " machhwo.", }, 3797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhws_ , " machhws.", }, 3798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwso_ , " machhwso.", }, 3799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwsu_ , " machhwsu.", }, 3800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwsuo_ , " machhwsuo.", }, 3801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwu_ , " machhwu.", }, 3802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_machhwuo_ , " machhwuo.", }, 3803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhw_ , " maclhw.", }, 3804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwo_ , " maclhwo.", }, 3805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhws_ , " maclhws.", }, 3806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwso_ , " maclhwso.", }, 3807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwsu_ , " maclhwsu.", }, 3808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwsuo_ , " maclhwsuo.", }, 3809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwu_ , " maclhwu.", }, 3810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_maclhwuo_ , " maclhwuo.", }, 3811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulchw_ , " mulchw.", }, 3812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulchwu_ , " mulchwu.", }, 3813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhhw_ , " mulhhw.", }, 3814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mulhhwu_ , " mulhhwu.", }, 3815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mullhw_ , " mullhw.", }, 3816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_mullhwu_ , " mullhwu.", }, 3817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmacchw_ , " nmacchw.", }, 3818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmacchwo_ , " nmacchwo.", }, 3819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmacchws_ , " nmacchws.", }, 3820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmacchwso_ , " nmacchwso.", }, 3821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmachhw_ , " nmachhw.", }, 3822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmachhwo_ , " nmachhwo.", }, 3823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmachhws_ , " nmachhws.", }, 3824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmachhwso_ , " nmachhwso.", }, 3825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmaclhw_ , " nmaclhw.", }, 3826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmaclhwo_ , " nmaclhwo.", }, 3827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmaclhws_ , " nmaclhws.", }, 3828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { &test_nmaclhwso_ , " nmaclhwso.", }, 3829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, }, 3830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 3831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (IS_PPC405) */ 3832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_table_t all_tests[] = { 3834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ia_ops_two , 3836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer arith insns with two args", 3837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00010102, 3838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_iar_ops_two , 3841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer arith insns with two args with flags update", 3842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01010102, 3843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_iac_ops_two , 3846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer arith insns with two args and carry", 3847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x02010102, 3848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_iacr_ops_two , 3851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer arith insns with two args and carry with flags update", 3852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x03010102, 3853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_il_ops_two , 3856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer logical insns with two args", 3857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00010202, 3858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ilr_ops_two , 3861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer logical insns with two args with flags update", 3862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01010202, 3863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_icr_ops_two , 3866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer compare insns (two args)", 3867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01010304, 3868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_icr_ops_two_i16 , 3871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer compare with immediate insns (two args)", 3872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01010305, 3873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ia_ops_two_i16 , 3876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer arith insns\n with one register + one 16 bits immediate args", 3877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00010106, 3878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_iar_ops_two_i16 , 3881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer arith insns\n with one register + one 16 bits immediate args with flags update", 3882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01010106, 3883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_il_ops_two_i16 , 3886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer logical insns\n with one register + one 16 bits immediate args", 3887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00010206, 3888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ilr_ops_two_i16 , 3891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer logical insns\n with one register + one 16 bits immediate args with flags update", 3892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01010206, 3893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_crl_ops_two , 3896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC condition register logical insns - two operands", 3897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01010202, 3898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_iac_ops_one , 3901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer arith insns with one arg and carry", 3902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x02010101, 3903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_iacr_ops_one , 3906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer arith insns with one arg and carry with flags update", 3907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x03010101, 3908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_il_ops_one , 3911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer logical insns with one arg", 3912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00010201, 3913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ilr_ops_one , 3916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer logical insns with one arg with flags update", 3917ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01010201, 3918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_il_ops_spe , 3921ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC logical insns with special forms", 3922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00010207, 3923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ilr_ops_spe , 3926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC logical insns with special forms with flags update", 3927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01010207, 3928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ild_ops_two_i16 , 3931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer load insns\n with one register + one 16 bits immediate args with flags update", 3932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00010508, 3933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3935ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ild_ops_two , 3936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer load insns with two register args", 3937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00010509, 3938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ist_ops_three_i16, 3941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer store insns\n with one register + one 16 bits immediate args with flags update", 3942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x0001050a, 3943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ist_ops_three , 3946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC integer store insns with three register args", 3947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x0001050b, 3948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3949663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng { 3950663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng tests_popcnt_ops_one , 3951663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "PPC integer population count with one register args, no flags", 3952663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 0x00010601, 3953663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng }, 3954ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 3955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_fa_ops_three , 3957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC floating point arith insns with three args", 3958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00020103, 3959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 3961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 3962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_far_ops_three , 3964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC floating point arith insns\n with three args with flags update", 3965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01020103, 3966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 3968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 3969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_fa_ops_two , 3971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC floating point arith insns with two args", 3972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00020102, 3973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 3975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 3976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_far_ops_two , 3978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC floating point arith insns\n with two args with flags update", 3979ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01020102, 3980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 3982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 3983ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3984ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_fcr_ops_two , 3985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC floating point compare insns (two args)", 3986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01020304, 3987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 3989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 3990ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_fa_ops_one , 3992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC floating point arith insns with one arg", 3993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00020101, 3994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 3995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 3996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 3997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 3998ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_far_ops_one , 3999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC floating point arith insns\n with one arg with flags update", 4000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01020101, 4001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 4003ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 4004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_fl_ops_spe , 4006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC floating point status register manipulation insns", 4007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00020207, 4008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 4010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 4011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_flr_ops_spe , 4013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC floating point status register manipulation insns\n with flags update", 4014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01020207, 4015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 4017ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 4018ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_fld_ops_two_i16 , 4020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC float load insns\n with one register + one 16 bits immediate args with flags update", 4021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00020508, 4022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 4024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 4025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_fld_ops_two , 4027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC float load insns with two register args", 4028ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00020509, 4029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 4031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 4032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_fst_ops_three_i16, 4034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC float store insns\n with one register + one 16 bits immediate args with flags update", 4035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x0002050a, 4036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 4038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 4039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_fst_ops_three , 4041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC float store insns with three register args", 4042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x0002050b, 4043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 4045ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_aa_ops_three , 4048ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC altivec integer arith insns with three args", 4049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00040103, 4050ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4052ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4053ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4054ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_al_ops_three , 4055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC altivec integer logical insns with three args", 4056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00040203, 4057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_aa_ops_two , 4062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC altivec integer arith insns with two args", 4063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00040102, 4064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4066ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4068ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_al_ops_two , 4069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC altivec integer logical insns with two args", 4070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00040202, 4071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4075ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_al_ops_one , 4076ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC altivec integer logical insns with one arg", 4077ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00040201, 4078ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4079ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4080ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4081ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4082ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ac_ops_two , 4083ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Altivec integer compare insns", 4084ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00040302, 4085ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4086ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4087ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4088ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4089ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_acr_ops_two , 4090ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Altivec integer compare insns with flags update", 4091ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01040302, 4092ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4093ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4094ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4095ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4096ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_av_int_ops_spe , 4097ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Altivec integer special insns", 4098ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00040207, 4099ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ald_ops_two , 4104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Altivec load insns with two register args", 4105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00040509, 4106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_ast_ops_three , 4111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Altivec store insns with three register args", 4112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x0004050b, 4113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4117663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng tests_afa_ops_two , 4118663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "Altivec floating point arith insns with two args", 4119663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 0x00050102, 4120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4124663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng tests_afa_ops_three , 4125663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "Altivec floating point arith insns with three args", 4126663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 0x00050103, 4127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_afa_ops_one , 4132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Altivec floating point arith insns with one arg", 4133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00050101, 4134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_afc_ops_two , 4139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Altivec floating point compare insns", 4140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00050302, 4141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_afcr_ops_two , 4146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Altivec floating point compare insns with flags update", 4147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01050302, 4148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_av_float_ops_spe, 4153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Altivec float special insns", 4154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00050207, 4155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 4157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (IS_PPC405) 4158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_p4m_ops_two , 4160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC 405 mac insns with three args", 4161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x00030102, 4162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (IS_PPC405) */ 4164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (IS_PPC405) 4165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 4166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests_p4mc_ops_two , 4167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC 405 mac insns with three args with flags update", 4168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 0x01030102, 4169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 4170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (IS_PPC405) */ 4171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { NULL, NULL, 0x00000000, }, 4172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 4173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* -------------- END #include "ops-ppc.c" -------------- */ 4175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic int verbose = 0; 4177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic int arg_list_size = 0; 4178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic double *fargs = NULL; 4180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic int nb_fargs = 0; 4181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic int nb_normal_fargs = 0; 4182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic HWord_t *iargs = NULL; 4183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic int nb_iargs = 0; 4184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic uint16_t *ii16 = NULL; 4185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic int nb_ii16 = 0; 4186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic vector unsigned int* viargs = NULL; 4189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic int nb_viargs = 0; 4190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic vector float* vfargs = NULL; 4191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic int nb_vfargs = 0; 4192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define TEST_VSCR_SAT 4194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic inline void register_farg (void *farg, 4197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int s, uint16_t _exp, uint64_t mant) 4198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint64_t tmp; 4200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmp = ((uint64_t)s << 63) | ((uint64_t)_exp << 52) | mant; 4202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *(uint64_t *)farg = tmp; 4203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 4204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("%d %03x %013llx => %016llx %0e\n", 4205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("%d %03x %013lx => %016lx %0e\n", 4207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s, _exp, mant, *(uint64_t *)farg, *(double *)farg); 4209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void build_fargs_table (void) 4212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Double precision: 4214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Sign goes from zero to one (1 bit) 4215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Exponent goes from 0 to ((1 << 12) - 1) (11 bits) 4216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Mantissa goes from 1 to ((1 << 52) - 1) (52 bits) 4217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * + special values: 4218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +0.0 : 0 0x000 0x0000000000000 => 0x0000000000000000 4219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -0.0 : 1 0x000 0x0000000000000 => 0x8000000000000000 4220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +infinity : 0 0x7FF 0x0000000000000 => 0x7FF0000000000000 4221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -infinity : 1 0x7FF 0x0000000000000 => 0xFFF0000000000000 4222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +QNaN : 0 0x7FF 0x7FFFFFFFFFFFF => 0x7FF7FFFFFFFFFFFF 4223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -QNaN : 1 0x7FF 0x7FFFFFFFFFFFF => 0xFFF7FFFFFFFFFFFF 4224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +SNaN : 0 0x7FF 0x8000000000000 => 0x7FF8000000000000 4225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -SNaN : 1 0x7FF 0x8000000000000 => 0xFFF8000000000000 4226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * (8 values) 4227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Ref only: 4229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Single precision 4230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Sign: 1 bit 4231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Exponent: 8 bits 4232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Mantissa: 23 bits 4233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +0.0 : 0 0x00 0x000000 => 0x00000000 4234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -0.0 : 1 0x00 0x000000 => 0x80000000 4235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +infinity : 0 0xFF 0x000000 => 0x7F800000 4236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -infinity : 1 0xFF 0x000000 => 0xFF800000 4237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +QNaN : 0 0xFF 0x3FFFFF => 0x7FBFFFFF 4238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -QNaN : 1 0xFF 0x3FFFFF => 0xFFBFFFFF 4239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +SNaN : 0 0xFF 0x400000 => 0x7FC00000 4240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -SNaN : 1 0xFF 0x400000 => 0xFFC00000 4241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 4242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint64_t mant; 4243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint16_t _exp, e0, e1; 4244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int s; 4245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i=0; 4246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Note: VEX isn't so hot with denormals, so don't bother 4248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown testing them: set _exp > 0 4249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 4250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if ( arg_list_size == 1 ) { // Large 4252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fargs = malloc(200 * sizeof(double)); 4253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (s=0; s<2; s++) { 4254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (e0=0; e0<2; e0++) { 4255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (e1=0x001; ; e1 = ((e1 + 1) << 2) + 6) { 4256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (e1 >= 0x400) 4257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown e1 = 0x3fe; 4258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = (e0 << 10) | e1; 4259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (mant = 0x0000000000001ULL; mant < (1ULL << 52); 4260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Add 'random' bits */ 4261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = ((mant + 0x4A6) << 13) + 0x359) { 4262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_farg(&fargs[i++], s, _exp, mant); 4263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (e1 == 0x3fe) 4265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 4266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { // Default 4270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fargs = malloc(16 * sizeof(double)); 4271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (s=0; s<2; s++) { // x2 4272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// for (e0=0; e0<2; e0++) { 4273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (e1=0x001; ; e1 = ((e1 + 1) << 13) + 7) { // x2 4274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// for (e1=0x001; ; e1 = ((e1 + 1) << 5) + 7) { // x3 4275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (e1 >= 0x400) 4276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown e1 = 0x3fe; 4277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// _exp = (e0 << 10) | e1; 4278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = e1; 4279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (mant = 0x0000000000001ULL; mant < (1ULL << 52); 4280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Add 'random' bits */ 4281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = ((mant + 0x4A6) << 29) + 0x359) { // x2 4282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_farg(&fargs[i++], s, _exp, mant); 4283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (e1 == 0x3fe) 4285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 4286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// } 4288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* To iterate over non-special values only */ 4292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nb_normal_fargs = i; 4293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Special values */ 4296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* +0.0 : 0 0x000 0x0000000000000 */ 4297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 0; 4298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0x000; 4299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x0000000000000ULL; 4300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_farg(&fargs[i++], s, _exp, mant); 4301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* -0.0 : 1 0x000 0x0000000000000 */ 4302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 1; 4303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0x000; 4304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x0000000000000ULL; 4305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_farg(&fargs[i++], s, _exp, mant); 4306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* +infinity : 0 0x7FF 0x0000000000000 */ 4307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 0; 4308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0x7FF; 4309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x0000000000000ULL; 4310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_farg(&fargs[i++], s, _exp, mant); 4311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* -infinity : 1 0x7FF 0x0000000000000 */ 4312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 1; 4313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0x7FF; 4314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x0000000000000ULL; 4315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_farg(&fargs[i++], s, _exp, mant); 4316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* +QNaN : 0 0x7FF 0x7FFFFFFFFFFFF */ 4317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 0; 4318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0x7FF; 4319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x7FFFFFFFFFFFFULL; 4320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_farg(&fargs[i++], s, _exp, mant); 4321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* -QNaN : 1 0x7FF 0x7FFFFFFFFFFFF */ 4322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 1; 4323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0x7FF; 4324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x7FFFFFFFFFFFFULL; 4325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_farg(&fargs[i++], s, _exp, mant); 4326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* +SNaN : 0 0x7FF 0x8000000000000 */ 4327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 0; 4328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0x7FF; 4329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x8000000000000ULL; 4330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_farg(&fargs[i++], s, _exp, mant); 4331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* -SNaN : 1 0x7FF 0x8000000000000 */ 4332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 1; 4333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0x7FF; 4334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x8000000000000ULL; 4335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_farg(&fargs[i++], s, _exp, mant); 4336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("Registered %d fargs values\n", i); 4337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nb_fargs = i; 4339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void build_iargs_table (void) 4342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint64_t tmp; 4344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i=0; 4345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 4347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (arg_list_size == 1) { // Large 4348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs = malloc(400 * sizeof(HWord_t)); 4349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (tmp=0; ; tmp = tmp + 1 + (tmp >> 1)) { 4350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (tmp >= 0x100000000ULL) 4351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmp = 0xFFFFFFFF; 4352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs[i++] = (HWord_t)tmp; 4353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("val %08x\n", (HWord_t)tmp); 4354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (tmp == 0xFFFFFFFF) 4355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 4356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { // Default 4358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs = malloc(10 * sizeof(HWord_t)); 4359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // for (tmp = 0; ; tmp = 71*tmp + 1 + (tmp>>1)) { // gives 8 4360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // for (tmp = 0; ; tmp = 100000*tmp + 1 + (tmp>>1)) { // gives 4 4361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (tmp=0; ; tmp = 999999*tmp + 999999) { // gives 3 4362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (tmp >= 0x100000000ULL) 4363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmp = 0xFFFFFFFF; 4364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs[i++] = (HWord_t)tmp; 4365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("val %08x\n", (HWord_t)tmp); 4366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (tmp == 0xFFFFFFFF) 4367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 4368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (arg_list_size == 1) { // Large 4372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs = malloc(800 * sizeof(HWord_t)); 4373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (tmp=0; ; tmp = 2*tmp + 1 + (tmp >> 2)) { 4374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if ((long)tmp < 0 ) 4375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmp = 0xFFFFFFFFFFFFFFFFULL; 4376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs[i++] = tmp; 4377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("val %016lx\n", tmp); 4378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (tmp == 0xFFFFFFFFFFFFFFFFULL) 4379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 4380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { // Default 4382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs = malloc(20 * sizeof(HWord_t)); 4383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // for (tmp=0; ; tmp = 9999*tmp + 999999) { // gives 6 4384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (tmp = 0; ; tmp = 123456789*tmp + 123456789999) { // gives 3 4385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if ((long)tmp < 0 ) 4386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmp = 0xFFFFFFFFFFFFFFFFULL; 4387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs[i++] = tmp; 4388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("val %016lx\n", tmp); 4389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (tmp == 0xFFFFFFFFFFFFFFFFULL) 4390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 4391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifndef __powerpc64__ 4394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("Registered %d iargs values\n", i); 4396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nb_iargs = i; 4397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void build_ii16_table (void) 4400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t tmp; 4402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i=0; 4403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (arg_list_size == 1) { // Large 4405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ii16 = malloc(200 * sizeof(uint32_t)); 4406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (tmp=0; ; tmp = tmp + 1 + (tmp >> 2)) { 4407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (tmp >= 0x10000) 4408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmp = 0xFFFF; 4409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ii16[i++] = tmp; 4410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("val %04x\n", tmp); 4411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (tmp == 0xFFFF) 4412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 4413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { // Default 4415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ii16 = malloc(10 * sizeof(uint32_t)); 4416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (tmp=0; ; tmp = 999*tmp + 999) { // gives 3 4417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (tmp >= 0x10000) 4418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmp = 0xFFFF; 4419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ii16[i++] = tmp; 4420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("val %04x\n", tmp); 4421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (tmp == 0xFFFF) 4422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 4423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("Registered %d ii16 values\n", i); 4426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nb_ii16 = i; 4427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 4430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void build_viargs_table (void) 4431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (ALTIVEC_ARGS_LARGE) 4433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int i=2; 4434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown viargs = memalign16(i * sizeof(vector unsigned int)); 4435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown viargs[0] = (vector unsigned int) { 0x01020304,0x05060708,0x090A0B0C,0x0E0D0E0F }; 4436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF_VEC32x4( viargs[0] ); 4437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown viargs[1] = (vector unsigned int) { 0xF1F2F3F4,0xF5F6F7F8,0xF9FAFBFC,0xFEFDFEFF }; 4438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF_VEC32x4( viargs[1] ); 4439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int i,j; 4441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // build from iargs table (large/default already set) 4442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown viargs = malloc(nb_iargs * sizeof(vector unsigned int)); 4443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 4444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown j = iargs[i]; 4445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown viargs[i] = (vector unsigned int){ j, j*2, j*3, j*4 }; 4446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF_VEC32x4( viargs[i] ); 4447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("Registered %d viargs values\n", i); 4451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nb_viargs = i; 4452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic inline void register_vfarg (vector float* vfarg, 4455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int s, uint8_t _exp, uint32_t mant) 4456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t tmp; 4458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vector uint32_t* vfargI = (vector uint32_t*)vfarg; 4459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmp = ((uint64_t)s << 31) | ((uint64_t)_exp << 23) | mant; 4461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *vfargI = (vector uint32_t){ tmp,tmp,tmp,tmp }; 4462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("%d %02x %06x => %08x %0e\n", 4463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s, _exp, mant, *((uint32_t*)&tmp), *(float*)&tmp); 4464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void build_vfargs_table (void) 4467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Sign goes from zero to one 4469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Exponent goes from 0 to ((1 << 9) - 1) 4470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Mantissa goes from 1 to ((1 << 24) - 1) 4471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * + special values: 4472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +0.0 : 0 0x00 0x000000 => 0x00000000 4473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -0.0 : 1 0x00 0x000000 => 0x80000000 4474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +infinity : 0 0xFF 0x000000 => 0x7F800000 4475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -infinity : 1 0xFF 0x000000 => 0xFF800000 4476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +SNaN : 0 0xFF 0x7FFFFF (non-zero) => 0x7FFFFFFF 4477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -SNaN : 1 0xFF 0x7FFFFF (non-zero) => 0xFFFFFFFF 4478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * +QNaN : 0 0xFF 0x3FFFFF (non-zero) => 0x7FBFFFFF 4479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * -QNaN : 1 0xFF 0x3FFFFF (non-zero) => 0xFFBFFFFF 4480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * (8 values) 4481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 4482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t mant; 4483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint16_t _exp; 4484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int s; 4485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i=0; 4486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (ALTIVEC_ARGS_LARGE) 4489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nb_vfargs = 12; 4490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vfargs = memalign16(nb_vfargs * sizeof(vector float)); 4491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // 4 values: 4493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (s=0; s<2; s++) { 4494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (_exp=0x5; ; _exp += 0x9D ) { 4495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (_exp > 0xDF) 4496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 4497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (mant = 0x3FFFFF; mant < 0x7FFFFF; 4498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = /* random */ ((mant + 0x1A6) << 31) + 0x159) { 4499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_vfarg(&vfargs[i++], s, (uint8_t)_exp, mant); 4500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nb_vfargs = 50; 4505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vfargs = memalign16(nb_vfargs * sizeof(vector float)); 4506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (s=0; s<2; s++) { 4508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (_exp=0x0; ; _exp += 0x3F ) { 4509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // for (_exp=0; ; _exp = ((_exp + 1) << 1) + 3) { 4510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (_exp >= 0xFE) 4511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0xFE; 4512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (mant = 0x0; mant < 0x7FFFFF; 4513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = /* random */ ((mant + 0x4A6) << 5) + 0x359) { 4514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_vfarg(&vfargs[i++], s, (uint8_t)_exp, mant); 4515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (_exp >= 0xFE) 4517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 4518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Special values */ 4523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* +0.0 : 0 0x00 0x000000 */ 4524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 0; 4525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0x00; 4526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x000000; 4527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_vfarg(&vfargs[i++], s, _exp, mant); 4528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* -0.0 : 1 0x00 0x000000 */ 4529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 1; 4530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0x00; 4531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x000000; 4532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_vfarg(&vfargs[i++], s, _exp, mant); 4533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* +infinity : 0 0xFF 0x000000 */ 4535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 0; 4536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0xFF; 4537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x000000; 4538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_vfarg(&vfargs[i++], s, _exp, mant); 4539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* -infinity : 1 0xFF 0x000000 */ 4540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 1; 4541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0xFF; 4542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x000000; 4543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_vfarg(&vfargs[i++], s, _exp, mant); 4544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* NaN: _exponent all 1s, non-zero fraction */ 4546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* SNaN is a NaN with the most significant fraction bit clear.*/ 4547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* +SNaN : 0 0xFF 0x7FFFFF */ 4548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 0; 4549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0xFF; 4550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x7FFFFF; 4551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_vfarg(&vfargs[i++], s, _exp, mant); 4552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* -SNaN : 1 0xFF 0x7FFFFF */ 4553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 1; 4554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0xFF; 4555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x7FFFFF; 4556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_vfarg(&vfargs[i++], s, _exp, mant); 4557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* QNaN is a NaN with the most significant fraction bit set */ 4559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* +QNaN : 0 0xFF 0x3F0000 */ 4560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 0; 4561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0xFF; 4562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x3FFFFF; 4563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_vfarg(&vfargs[i++], s, _exp, mant); 4564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* -QNaN : 1 0xFF 0x3F0000 */ 4565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s = 1; 4566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _exp = 0xFF; 4567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mant = 0x3FFFFF; 4568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown register_vfarg(&vfargs[i++], s, _exp, mant); 4569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown AB_DPRINTF("Registered %d vfargs values\n", i); 4570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(i <= nb_vfargs); 4572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nb_vfargs = i; 4573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0 4577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void dump_iargs (void) 4578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 4580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 0; i < nb_iargs; i++) { 4581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("iarg %d: %08x %08x %08x\n", i, iargs[i], 4582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (unsigned int)&iargs[i], (unsigned int)iargs); 4583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void dump_iargs16 (void) 4587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 4589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 0; i < nb_ii16; i++) { 4590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("iarg16 %d: %08x %08x %08x\n", i, ii16[i], 4591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (unsigned int)&ii16[i], (unsigned int)ii16); 4592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void dump_vfargs (void) 4596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vector float vf; 4598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown float f; 4599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i=0; 4600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_vfargs; i++) { 4601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vf = (vector float)vfargs[i]; 4602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown f = ((float*)&vf)[0]; 4603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("vfarg %3d: %24f : %08x\n", i, f, ((unsigned int*)&f)[0]); 4604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_int_three_args (const char* name, test_func_t func, 4609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 4610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 4612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 4613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, k; 4614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 4616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_iargs; j++) { 4617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<nb_iargs; k++) { 4618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 4619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = iargs[j]; 4620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r16 = iargs[k]; 4621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 4623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 4624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 4625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 4626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 4628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n", 4629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %016llx, %016llx => %016llx (%08x %08x)\n", 4631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], iargs[j], iargs[k], res, flags, xer); 4633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 4635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_int_two_args (const char* name, test_func_t func, 4640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t test_flags) 4641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 4643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer, xer_orig; 4644663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng int i, j, is_div; 4645663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#ifdef __powerpc64__ 4646663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng int zap_hi32; 4647663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#endif 4648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // catches div, divwu, divo, divwu, divwuo, and . variants 4650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown is_div = strstr(name, "divw") != NULL; 4651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4652663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#ifdef __powerpc64__ 4653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown zap_hi32 = strstr(name, "mulhw") != NULL; 4654663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#endif 4655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown xer_orig = 0x00000000; 4657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown redo: 4658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 4659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_iargs; j++) { 4660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* result of division by zero is implementation dependent. 4662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown don't test it. */ 4663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (is_div && iargs[j] == 0) 4664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 4665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 4667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = iargs[j]; 4668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_XER(xer_orig); 4670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_ZERO; 4671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 4672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 4673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 4674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 4676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %08x, %08x => %08x (%08x %08x)\n", 4677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (zap_hi32) res &= 0xFFFFFFFFULL; 4679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %016llx => %016llx (%08x %08x)\n", 4680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], iargs[j], res, flags, xer); 4682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 4684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if ((test_flags & PPC_XER_CA) && xer_orig == 0x00000000) { 4686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown xer_orig = 0x20000000; 4687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown goto redo; 4688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_int_one_arg (const char* name, test_func_t func, 4692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t test_flags) 4693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 4695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer, xer_orig; 4696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 4697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown xer_orig = 0x00000000; 4699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown redo: 4700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 4701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 4702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_XER(xer_orig); 4703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_ZERO; 4704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 4705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 4706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 4707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 4709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %08x => %08x (%08x %08x)\n", 4710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx => %016llx (%08x %08x)\n", 4712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], res, flags, xer); 4714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if ((test_flags & PPC_XER_CA) && xer_orig == 0x00000000) { 4716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown xer_orig = 0x20000000; 4717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown goto redo; 4718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic inline void invalidate_icache ( void *ptr, int nbytes ) 4722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown HWord_t startaddr = (HWord_t) ptr; 4724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown HWord_t endaddr = startaddr + nbytes; 4725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown HWord_t cls = 32; /*VG_(cache_line_size_ppc32);*/ 4726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown HWord_t addr; 4727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown startaddr &= ~(cls - 1); 4729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (addr = startaddr; addr < endaddr; addr += cls) 4730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm volatile("dcbst 0,%0" : : "r" (addr)); 4731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm volatile("sync"); 4732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (addr = startaddr; addr < endaddr; addr += cls) 4733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm volatile("icbi 0,%0" : : "r" (addr)); 4734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown asm volatile("sync; isync"); 4735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* for god knows what reason, if this isn't inlined, the 4738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown program segfaults. */ 4739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic inline 4740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid _patch_op_imm (uint32_t *p_insn, uint16_t imm, int sh, int len) 4741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t mask = ((1 << len) - 1) << sh; 4743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *p_insn = (*p_insn & ~mask) | ((imm<<sh) & mask); 4744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic inline 4747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid patch_op_imm (uint32_t* p_insn, uint16_t imm, int sh, int len) 4748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _patch_op_imm(p_insn, imm, sh, len); 4750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown invalidate_icache(p_insn, 4); 4751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic inline 4754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid patch_op_imm16 (uint32_t *p_insn, uint16_t imm) 4755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(p_insn, imm, 0, 16); 4757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Copy the 2 insn function starting at p_func_F to func_buf[], and 4761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return a possibly different pointer, which, when called, runs the 4762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown copy in func_buf[]. */ 4763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic inline 4764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntest_func_t init_function( test_func_t p_func_F, uint32_t func_buf[] ) 4765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* p_func = (uint32_t*)p_func_F; 4767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 4768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func_buf[0] = p_func[0]; 4769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func_buf[1] = p_func[1]; 4770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return (test_func_t)&func_buf[0]; 4771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* p_func points to a function descriptor, the first word of which 4773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown points to the real code. Copy the code itself but not the 4774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown descriptor, and just swizzle the descriptor's entry pointer. */ 4775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint64_t* descr = (uint64_t*)p_func; 4776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* entry = (uint32_t*)(descr[0]); 4777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func_buf[0] = entry[0]; 4778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func_buf[1] = entry[1]; 4779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown descr[0] = (uint64_t)&func_buf[0]; 4780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return (test_func_t)descr; 4781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifndef __powerpc64__ 4782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_int_one_reg_imm16 (const char* name, 4786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func_IN, 4787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 4788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 4790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 4791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 4792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 4793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j; 4794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 4796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_ii16; j++) { 4797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 4798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 4799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm16(&func_buf[0], ii16[j]); 4800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 4802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 4804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 4805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 4806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 4807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 4809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %08x, %08x => %08x (%08x %08x)\n", 4810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %08x => %016llx (%08x %08x)\n", 4812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], ii16[j], res, flags, xer); 4814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 4816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Special test cases for: 4820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * rlwimi 4821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * rlwinm 4822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * rlwnm 4823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * srawi 4824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * mcrf 4825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * mcrfs 4826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * mcrxr_cb 4827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * mfcr_cb 4828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * mfspr_cb 4829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * mftb_cb 4830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * mtcrf_cb 4831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * mtspr_cb 4832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __powerpc64__ only: 4834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * rldcl rA,rS,SH,MB 4835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * rldcr rA,rS,SH,ME 4836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * rldic rA,rS,SH,MB 4837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * rldicl rA,rS,SH,MB 4838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * rldicr rA,rS,SH,ME 4839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * rldimi rA,rS,SH,MB 4840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * sradi rA,rS,SH 4841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 4842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void rlwi_cb (const char* name, test_func_t func_IN, 4844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 4845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 4847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 4848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 4849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 4850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, k, l, arg_step; 4851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_step = (arg_list_size == 0) ? 31 : 3; 4853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r17 = 0; // rlwimi takes r17 as input: start with a clean slate. 4855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 4857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<32; j+=arg_step) { 4858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<32; k+=arg_step) { 4859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (l=0; l<32; l+=arg_step) { 4860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 4861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 4862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _patch_op_imm(&func_buf[0], j, 11, 5); 4863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _patch_op_imm(&func_buf[0], k, 6, 5); 4864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], l, 1, 5); 4865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 4867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 4869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 4870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 4871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 4872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 4874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %08x, %2d, %2d, %2d => %08x (%08x %08x)\n", 4875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %2d, %2d, %2d => %016llx (%08x %08x)\n", 4877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], j, k, l, res, flags, xer); 4879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 4881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void rlwnm_cb (const char* name, test_func_t func_IN, 4887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 4888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 4890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 4891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 4892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 4893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, k, l, arg_step; 4894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_step = (arg_list_size == 0) ? 31 : 3; 4896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 4898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_iargs; j++) { 4899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<32; k+=arg_step) { 4900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (l=0; l<32; l+=arg_step) { 4901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 4902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 4903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _patch_op_imm(&func_buf[0], k, 6, 5); 4904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], l, 1, 5); 4905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 4907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = iargs[j]; 4908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 4910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 4911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 4912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 4913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 4915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %08x, %08x, %2d, %2d => %08x (%08x %08x)\n", 4916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %016llx, %2d, %2d => %016llx (%08x %08x)\n", 4918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], iargs[j], k, l, res, flags, xer); 4920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4921ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 4922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void srawi_cb (const char* name, test_func_t func_IN, 4928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 4929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 4931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 4932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 4933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 4934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, arg_step; 4935ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_step = (arg_list_size == 0) ? 31 : 1; 4937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 4939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<32; j+=arg_step) { 4940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 4941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 4942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], j, 11, 5); 4943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 4945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 4947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 4948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 4949ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 4950ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4951ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 4952ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %08x, %2d => %08x (%08x %08x)\n", 4953ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %2d => %016llx (%08x %08x)\n", 4955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], j, res, flags, xer); 4957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 4959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void mcrf_cb (const char* name, test_func_t func_IN, 4963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 4964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 4965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 4966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 4967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 4968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, k, arg_step; 4969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_step = (arg_list_size == 0) ? 7 : 1; 4971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 4973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<8; j+=arg_step) { 4974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<8; k+=arg_step) { 4975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 4976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 4977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _patch_op_imm(&func_buf[0], j, 23, 3); 4978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], k, 18, 3); 4979ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 4981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR(r14); 4983ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_XER_ZERO; 4984ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 4985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 4986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 4988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %d, %d (%08x) => (%08x %08x)\n", 4989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 4990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %d, %d (%016llx) => (%08x %08x)\n", 4991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 4992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, j, k, iargs[i], flags, xer); 4993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 4995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 4997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 4998ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void mcrxr_cb (const char* name, test_func_t func_IN, 5000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 5003ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 5004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, k, arg_step; 5006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_step = 1; //(arg_list_size == 0) ? 7 : 1; 5008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<16; i+=arg_step) { 5010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown j = i << 28; 5011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<8; k+=arg_step) { 5012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 5013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 5014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], k, 23, 3); 5015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = j; 5017ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5018ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_ZERO; 5019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_XER(r14); 5020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %d (%08x) => (%08x %08x)\n", 5024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, k, j, flags, xer); 5025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 5027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5028ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void mfcr_cb (const char* name, test_func_t func, 5031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 5034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 5036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 5038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 5039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Set up flags for test */ 5041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR(r14); 5042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_XER_ZERO; 5043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5045ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 5046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5048ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s (%08x) => %08x (%08x %08x)\n", 5049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s (%016llx) => %016llx (%08x %08x)\n", 5051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5052ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], res, flags, xer); 5053ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5054ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// NOTE: Not using func: calling function kills lr 5057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void mfspr_cb (const char* name, test_func_t func, 5058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //volatile uint32_t res, flags, xer, ctr, lr, tmpcr, tmpxer; 5061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 5062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int j, k; 5063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = func; // just to stop compiler complaining 5064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // mtxer followed by mfxer 5066ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<nb_iargs; k++) { 5067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown j = iargs[k]; 5068ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__( 5069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtxer %1\n" 5070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\tmfxer %0" 5071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : /*out*/"=b"(res) : /*in*/"b"(j) : /*trashed*/"xer" 5072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 5073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res &= 0xE000007F; /* rest of the bits are undefined */ 5074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5075ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5076ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s 1 (%08x) -> mtxer -> mfxer => %08x\n", 5077ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s 1 (%08x) -> mtxer -> mfxer => %016llx\n", 5079ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5080ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, j, res); 5081ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5082ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5083ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // mtlr followed by mflr 5084ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<nb_iargs; k++) { 5085ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown j = iargs[k]; 5086ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__( 5087ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtlr %1\n" 5088ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\tmflr %0" 5089ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : /*out*/"=b"(res) : /*in*/"b"(j) : /*trashed*/"lr" 5090ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 5091ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5092ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5093ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s 8 (%08x) -> mtlr -> mflr => %08x\n", 5094ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s 8 (%08x) -> mtlr -> mflr => %016llx\n", 5096ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5097ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, j, res); 5098ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5099ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // mtctr followed by mfctr 5101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<nb_iargs; k++) { 5102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown j = iargs[k]; 5103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__( 5104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtctr %1\n" 5105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\tmfctr %0" 5106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : /*out*/"=b"(res) : /*in*/"b"(j) : /*trashed*/"ctr" 5107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 5108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s 9 (%08x) -> mtctr -> mfctr => %08x\n", 5111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s 9 (%08x) -> mtctr -> mfctr => %016llx\n", 5113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, j, res); 5115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void mtcrf_cb (const char* name, test_func_t func_IN, 5119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 5122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 5123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, arg_step; 5125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_step = (arg_list_size == 0) ? 99 : 1; 5127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 5129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<256; j+=arg_step) { 5130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 5131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 5132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], j, 12, 8); 5133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 5135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %3d, %08x => (%08x %08x)\n", 5142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %3d, %016llx => (%08x %08x)\n", 5144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, j, iargs[i], flags, xer); 5146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 5148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// NOTE: Not using func: calling function kills lr 5152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void mtspr_cb (const char* name, test_func_t func, 5153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 5158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void rldc_cb (const char* name, test_func_t func_IN, 5159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 5162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 5163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 5164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, k, arg_step; 5166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_step = (arg_list_size == 0) ? 7 : 3; 5168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 5170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_iargs; j++) { 5171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<64; k+=arg_step) { 5172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 5173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 5174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], (((k & 0x1F)<<1) | ((k>>5)&1)), 5, 6); 5175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 5177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = iargs[j]; 5178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 5183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %016llx, %2d => %016llx (%08x %08x)\n", 5185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], iargs[j], k, res, flags, xer); 5186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 5188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void rldi_cb (const char* name, test_func_t func_IN, 5193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 5196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 5197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 5198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, k, arg_step; 5200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_step = (arg_list_size == 0) ? 7 : 3; 5202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 5204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<64; j+=arg_step) { // SH 5205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<64; k+=arg_step) { // MB|ME 5206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 5207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 5208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _patch_op_imm(&func_buf[0], (j & 0x1F), 11, 5); 5209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _patch_op_imm(&func_buf[0], ((j>>5)&1), 1, 1); 5210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], (((k & 0x1F)<<1) | ((k>>5)&1)), 5, 6); 5211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 5213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 5218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %2d, %2d => %016llx (%08x %08x)\n", 5220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], j, k, res, flags, xer); 5221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 5223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void sradi_cb (const char* name, test_func_t func_IN, 5228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 5231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 5232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res; 5233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, arg_step; 5235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_step = (arg_list_size == 0) ? 7 : 3; 5237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 5239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<64; j+=arg_step) { // SH 5240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 5241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 5242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown _patch_op_imm(&func_buf[0], (j & 0x1F), 11, 5); 5243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], ((j>>5)&1), 1, 1); 5244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 5246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 5251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %2d => %016llx (%08x %08x)\n", 5253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], j, res, flags, xer); 5254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 5256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 5259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct special_t special_t; 5262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct special_t { 5264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const char *name; 5265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown void (*test_cb)(const char* name, test_func_t func, 5266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags); 5267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 5268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_special (special_t *table, 5270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const char* name, test_func_t func, 5271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const char *tmp; 5274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 5275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (tmp = name; isspace(*tmp); tmp++) 5277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 5278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; table[i].name != NULL; i++) { 5279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0 5280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "look for handler for '%s' (%s)\n", name, 5281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown table[i].name); 5282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (strcmp(table[i].name, tmp) == 0) { 5284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*table[i].test_cb)(name, func, test_flags); 5285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return; 5286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "ERROR: no test found for op '%s'\n", name); 5289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic special_t special_int_ops[] = { 5292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rlwimi", /* One register + 3 5 bits immediate arguments */ 5294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rlwi_cb, 5295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rlwimi.", /* One register + 3 5 bits immediate arguments */ 5298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rlwi_cb, 5299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rlwinm", /* One register + 3 5 bits immediate arguments */ 5302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rlwi_cb, 5303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rlwinm.", /* One register + 3 5 bits immediate arguments */ 5306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rlwi_cb, 5307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rlwnm", /* Two registers + 2 5 bits immediate arguments */ 5310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rlwnm_cb, 5311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rlwnm.", /* Two registers + 2 5 bits immediate arguments */ 5314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rlwnm_cb, 5315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "srawi", /* One register + 1 5 bits immediate arguments */ 5318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &srawi_cb, 5319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "srawi.", /* One register + 1 5 bits immediate arguments */ 5322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &srawi_cb, 5323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mcrf", /* 2 3 bits immediate arguments */ 5326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mcrf_cb, 5327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0 5329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mcrfs", /* 2 3 bits immediate arguments */ 5331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mcrfs_cb, 5332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mcrxr", /* 1 3 bits immediate argument */ 5336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mcrxr_cb, 5337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mfcr", /* No arguments */ 5340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mfcr_cb, 5341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mfspr", /* 1 10 bits immediate argument */ 5344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mfspr_cb, 5345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0 5347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { // Move from time base 5348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mftb", /* 1 10 bits immediate arguments */ 5349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mftb_cb, 5350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtcrf", /* One register + 1 8 bits immediate arguments */ 5354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mtcrf_cb, 5355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtspr", /* One register + 1 10 bits immediate arguments */ 5358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mtspr_cb, 5359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 5361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldcl", /* Two registers + 1 6 bit immediate argument */ 5363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldc_cb, 5364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldcl.", /* Two registers + 1 6 bit immediate argument */ 5367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldc_cb, 5368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldcr", /* Two registers + 1 6 bit immediate argument */ 5371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldc_cb, 5372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldcr.", /* Two registers + 1 6 bit immediate argument */ 5375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldc_cb, 5376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldic", /* One register + 2 6 bit immediate arguments */ 5379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldi_cb, 5380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldic.", /* One register + 2 6 bit immediate arguments */ 5383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldi_cb, 5384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldicl", /* One register + 2 6 bit immediate arguments */ 5387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldi_cb, 5388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldicl.", /* One register + 2 6 bit immediate arguments */ 5391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldi_cb, 5392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldicr", /* One register + 2 6 bit immediate arguments */ 5395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldi_cb, 5396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldicr.", /* One register + 2 6 bit immediate arguments */ 5399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldi_cb, 5400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldimi", /* One register + 2 6 bit immediate arguments */ 5403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldi_cb, 5404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "rldimi.", /* One register + 2 6 bit immediate arguments */ 5407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &rldi_cb, 5408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "sradi", /* One register + 1 6 bit immediate argument */ 5411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &sradi_cb, 5412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "sradi.", /* One register + 1 6 bit immediate argument */ 5415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &sradi_cb, 5416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #ifdef __powerpc64__ 5418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 5420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 5421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 5423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_int_special (const char* name, test_func_t func, 5425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t test_flags) 5426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_special(special_int_ops, name, func, test_flags); 5428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_int_ld_one_reg_imm16 (const char* name, 5432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func_IN, 5433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 5436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 5437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res, base; 5438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, offs, is_lwa=0; 5440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __powerpc64__ 5442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown is_lwa = strstr(name, "lwa") != NULL; 5443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // +ve d 5446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&iargs[0]; 5447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 5448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown offs = i * sizeof(HWord_t); 5449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 5451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 5452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (is_lwa) 5453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], offs>>2, 2, 14); 5454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown else 5455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm16(&func_buf[0], offs); 5456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = base; 5458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 5463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %2d, (%08x) => %08x, %2d (%08x %08x)\n", 5466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %3d, (%016llx) => %016llx, %3lld (%08x %08x)\n", 5468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, offs, iargs[i], res, r14-base, flags, xer); 5470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 5472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // -ve d 5474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&iargs[nb_iargs-1]; 5475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = -nb_iargs+1; i<=0; i++) { 5476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown offs = i * sizeof(HWord_t); 5477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 5479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func, func_buf ); 5480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm16(&func_buf[0], offs); 5481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = base; 5483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 5488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %2d, (%08x) => %08x, %2d (%08x %08x)\n", 5491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %3d, (%016llx) => %016llx, %3lld (%08x %08x)\n", 5493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, offs, iargs[nb_iargs-1+i], res, r14-base, flags, xer); 5495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_int_ld_two_regs (const char* name, 5499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func, 5500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t res, base; 5503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, offs; 5505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // +ve d 5507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&iargs[0]; 5508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 5509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown offs = i * sizeof(HWord_t); 5510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = base; 5511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = offs; 5512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 5517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %d (%08x) => %08x, %d (%08x %08x)\n", 5520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %3d, (%016llx) => %016llx, %2lld (%08x %08x)\n", 5522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, offs, iargs[i], res, r14-base, flags, xer); 5524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_int_st_two_regs_imm16 (const char* name, 5528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func_IN, 5529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 5532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 5533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, offs, k; 5535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown HWord_t *iargs_priv, base; 5536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // private iargs table to store to 5538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs_priv = malloc(nb_iargs * sizeof(HWord_t)); 5539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // +ve d 5541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&iargs_priv[0]; 5542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 5543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<nb_iargs; k++) // clear array 5544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs_priv[k] = 0; 5545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown offs = i * sizeof(HWord_t); 5547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 5549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 5550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm16(&func_buf[0], offs); 5551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; // read from iargs 5553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = base; // store to r15 + offs 5554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %08x, %2d => %08x, %2d (%08x %08x)\n", 5561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %3d => %016llx, %3lld (%08x %08x)\n", 5563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], offs, iargs_priv[i], r15-base, flags, xer); 5565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 5567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // -ve d 5569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&iargs_priv[nb_iargs-1]; 5570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = -nb_iargs+1; i<=0; i++) { 5571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<nb_iargs; k++) // clear array 5572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs_priv[k] = 0; 5573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown offs = i * sizeof(HWord_t); 5575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 5577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func, func_buf ); 5578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm16(&func_buf[0], offs); 5579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[nb_iargs-1+i]; // read from iargs 5581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = base; // store to r15 + offs 5582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %08x, %2d => %08x, %2d (%08x %08x)\n", 5589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %3d => %016llx, %3lld (%08x %08x)\n", 5591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[nb_iargs-1+i], offs, iargs_priv[nb_iargs-1+i], 5593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15-base, flags, xer); 5594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown free(iargs_priv); 5596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_int_st_three_regs (const char* name, 5599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func, 5600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, offs, k; 5604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown HWord_t *iargs_priv, base; 5605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // private iargs table to store to 5607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs_priv = malloc(nb_iargs * sizeof(HWord_t)); 5608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&iargs_priv[0]; 5610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 5611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<nb_iargs; k++) // clear array 5612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown iargs_priv[k] = 0; 5613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown offs = i * sizeof(HWord_t); 5615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; // read from iargs 5616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = base; // store to r15 + offs 5617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r16 = offs; 5618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %08x, %d => %08x, %d (%08x %08x)\n", 5625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %3d => %016llx, %2lld (%08x %08x)\n", 5627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], offs, iargs_priv[i], r15-base, flags, xer); 5629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown free(iargs_priv); 5631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Used in do_tests, indexed by flags->nb_args 5635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Elements correspond to enum test_flags::num args 5636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/ 5637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_loop_t int_loops[] = { 5638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_int_one_arg, 5639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_int_two_args, 5640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_int_three_args, 5641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_int_two_args, 5642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_int_one_reg_imm16, 5643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_int_one_reg_imm16, 5644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_int_special, 5645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_int_ld_one_reg_imm16, 5646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_int_ld_two_regs, 5647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_int_st_two_regs_imm16, 5648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_int_st_three_regs, 5649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 5650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 5652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_float_three_args (const char* name, test_func_t func, 5653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double res; 5656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint64_t u0, u1, u2, ur; 5657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags; 5658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, k; 5659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Note: using nb_normal_fargs: 5661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown - not testing special values for these insns 5662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 5663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_normal_fargs; i+=3) { 5665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_normal_fargs; j+=5) { 5666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<nb_normal_fargs; k+=7) { 5667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown u0 = *(uint64_t *)(&fargs[i]); 5668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown u1 = *(uint64_t *)(&fargs[j]); 5669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown u2 = *(uint64_t *)(&fargs[k]); 5670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown f14 = fargs[i]; 5671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown f15 = fargs[j]; 5672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown f16 = fargs[k]; 5673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_FPSCR_ZERO; 5675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR(flags); 5678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = f17; 5679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ur = *(uint64_t *)(&res); 5680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Note: zapping the bottom byte of the result, 5682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown as vex's accuracy isn't perfect */ 5683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ur &= 0xFFFFFFFFFFFFFF00ULL; 5684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %016llx, %016llx, %016llx => %016llx", 5687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %016llx, %016llx => %016llx", 5689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, u0, u1, u2, ur); 5691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_FLOAT_FLAGS 5692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" (%08x)", flags); 5693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 5695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 5697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_float_two_args (const char* name, test_func_t func, 5702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double res; 5705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint64_t u0, u1, ur; 5706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags; 5707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j; 5708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_fargs; i+=3) { 5710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_fargs; j+=5) { 5711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown u0 = *(uint64_t *)(&fargs[i]); 5712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown u1 = *(uint64_t *)(&fargs[j]); 5713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown f14 = fargs[i]; 5714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown f15 = fargs[j]; 5715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_FPSCR_ZERO; 5717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR(flags); 5720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = f17; 5721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ur = *(uint64_t *)(&res); 5722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %016llx, %016llx => %016llx", 5725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %016llx => %016llx", 5727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, u0, u1, ur); 5729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_FLOAT_FLAGS 5730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" (%08x)", flags); 5731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 5733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 5735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_float_one_arg (const char* name, test_func_t func, 5739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double res; 5742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint64_t u0, ur; 5743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags; 5744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov int i; 5745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov unsigned zap_hi_32bits, zap_lo_44bits, zap_lo_47bits; 5746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* if we're testing fctiw or fctiwz, zap the hi 32bits, 5748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown as they're undefined */ 5749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov zap_hi_32bits = strstr(name, " fctiw") != NULL ? 1 : 0; 5750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov zap_lo_44bits = strstr(name, " fres") != NULL ? 1 : 0; 5751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov zap_lo_47bits = strstr(name, " frsqrte") != NULL ? 1 : 0; 5752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 5753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov assert(zap_hi_32bits + zap_lo_44bits + zap_lo_47bits <= 1); 5754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_fargs; i++) { 5756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown u0 = *(uint64_t *)(&fargs[i]); 5757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown f14 = fargs[i]; 5758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_FPSCR_ZERO; 5760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR(flags); 5763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = f17; 5764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ur = *(uint64_t *)(&res); 5765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5766663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng if (strstr(name, " frsqrte") != NULL) 5767663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* The 32-bit frsqrte instruction is the Floatig Reciprical Square 5768663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * Root Estimate instruction. The precision of the estimate will 5769663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * vary from Proceesor implementation. The approximation varies in 5770663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * bottom two bytes of the 32-bit result. 5771663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng */ 5772663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng ur &= 0xFFFF000000000000ULL; 5773663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 5774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (zap_hi_32bits) 5775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov ur &= 0x00000000FFFFFFFFULL; 5776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (zap_lo_44bits) 5777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov ur &= 0xFFFFF00000000000ULL; 5778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (zap_lo_47bits) 5779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov ur &= 0xFFFF800000000000ULL; 5780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %016llx => %016llx", 5783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx => %016llx", 5785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, u0, ur); 5787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_FLOAT_FLAGS 5788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" (%08x)", flags); 5789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 5791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Special test cases for: 5795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * mffs 5796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * mtfsb0 5797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * mtfsb1 5798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 5799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic special_t special_float_ops[] = { 5800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0 5801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mffs", /* One 5 bits immediate argument */ 5803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mffs_cb, 5804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mffs.", /* One 5 bits immediate argument */ 5807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mffs_cb, 5808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtfsb0", /* One 5 bits immediate argument */ 5811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mffs_cb, 5812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtfsb0.", /* One 5 bits immediate argument */ 5815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mffs_cb, 5816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtfsb1", /* One 5 bits immediate argument */ 5819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mffs_cb, 5820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtfsb1.", /* One 5 bits immediate argument */ 5823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mffs_cb, 5824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtfsf", /* One register + 1 8 bits immediate argument */ 5827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mtfsf_cb, 5828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtfsf.", /* One register + 1 8 bits immediate argument */ 5831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mtfsf_cb, 5832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtfsfi", /* One 5 bits argument + 1 5 bits argument */ 5835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mtfsfi_cb, 5836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mtfsfi.", /* One 5 bits argument + 1 5 bits argument */ 5839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &mtfsfi_cb, 5840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 5843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 5844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 5845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 5846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 5847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_float_special (const char* name, test_func_t func, 5849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t test_flags) 5850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_special(special_float_ops, name, func, test_flags); 5852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_float_ld_one_reg_imm16 (const char* name, 5856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func_IN, 5857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 5860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 5861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t base; 5862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile double src, res; 5864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, offs; 5865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* offset within [1-nb_fargs:nb_fargs] */ 5867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=1-nb_fargs; i<nb_fargs; i++) { 5868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown offs = i * 8; // offset = i * sizeof(double) 5869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (i < 0) { 5870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = fargs[nb_fargs-1 + i]; 5871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&fargs[nb_fargs-1]; 5872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { 5873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = fargs[i]; 5874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&fargs[0]; 5875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 5878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 5879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm16(&func_buf[0], offs); 5880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load from fargs[idx] => r14 + offs 5882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = base; 5883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = f17; 5888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %016llx, %4d => %016llx, %4d", 5891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %4d => %016llx, %4lld", 5893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, double_to_bits(src), offs, 5895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double_to_bits(res), r14-base); 5896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_FLOAT_FLAGS 5897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" (%08x %08x)", flags, xer); 5898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 5900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 5902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_float_ld_two_regs (const char* name, 5905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func, 5906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t base; 5909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile double src, res; 5911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, offs; 5912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* offset within [1-nb_fargs:nb_fargs] */ 5914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=1-nb_fargs; i<nb_fargs; i++) { 5915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown offs = i * 8; // offset = i * sizeof(double) 5916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (i < 0) { // base reg = start of array 5917ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = fargs[nb_fargs-1 + i]; 5918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&fargs[nb_fargs-1]; 5919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { 5920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = fargs[i]; 5921ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&fargs[0]; 5922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = base; 5925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = offs; 5926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = f17; 5931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 5933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %016llx, %4d => %016llx, %4d", 5934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 5935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %4lld => %016llx, %4lld", 5936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, double_to_bits(src), r15/*offs*/, 5938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double_to_bits(res), r14-base); 5939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_FLOAT_FLAGS 5940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" (%08x %08x)", flags, xer); 5941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 5942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 5943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 5945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_float_st_two_regs_imm16 (const char* name, 5947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func_IN, 5948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 5949ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 5950ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 5951ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 5952ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown HWord_t base; 5953ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 5954ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double src, *p_dst; 5955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, offs; 5956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double *fargs_priv; 5957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int nb_tmp_fargs = nb_fargs; 5958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* if we're storing an fp single-precision, don't want nans 5961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown - the vex implementation doesn't like them (yet) 5962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Note: This is actually a bigger problem: the vex implementation 5963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rounds these insns twice. This leads to many rounding errors. 5964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown For the small fargs set, however, this doesn't show up. 5965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 5966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (strstr(name, "stfs") != NULL) 5967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nb_tmp_fargs = nb_normal_fargs; 5968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // private fargs table to store to 5971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fargs_priv = malloc(nb_tmp_fargs * sizeof(double)); 5972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* offset within [1-nb_tmp_fargs:nb_tmp_fargs] */ 5974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=1-nb_tmp_fargs; i<nb_tmp_fargs; i++) { 5975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown offs = i * 8; // offset = i * sizeof(double) 5976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (i < 0) { 5977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = fargs [nb_tmp_fargs-1 + i]; 5978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_dst = &fargs_priv[nb_tmp_fargs-1 + i]; 5979ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&fargs_priv[nb_tmp_fargs-1]; 5980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { 5981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = fargs [i]; 5982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_dst = &fargs_priv[i]; 5983ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&fargs_priv[0]; 5984ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 5985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *p_dst = 0; // clear dst 5986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 5988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 5989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm16(&func_buf[0], offs); 5990ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // read from fargs[idx] => f14 5992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // store to fargs_priv[idx] => r15 + offs 5993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown f14 = src; 5994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = base; 5995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 5997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 5998ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 5999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 6001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %016llx, %4d => %016llx, %4d", 6002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %4d => %016llx, %4lld", 6004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, double_to_bits(src), offs, 6006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double_to_bits(*p_dst), r15-base); 6007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_FLOAT_FLAGS 6008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" (%08x %08x)", flags, xer); 6009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 6011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown free(fargs_priv); 6013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_float_st_three_regs (const char* name, 6016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func, 6017ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6018ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile HWord_t base; 6020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, xer; 6021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double src, *p_dst; 6022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, offs; 6023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double *fargs_priv; 6024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int nb_tmp_fargs = nb_fargs; 6025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* if we're storing an fp single-precision, don't want nans 6028ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown - the vex implementation doesn't like them (yet) 6029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Note: This is actually a bigger problem: the vex implementation 6030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rounds these insns twice. This leads to many rounding errors. 6031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown For the small fargs set, however, this doesn't show up. 6032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 6033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (strstr(name, "stfs") != NULL) // stfs(u)(x) 6034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nb_tmp_fargs = nb_normal_fargs; 6035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // private fargs table to store to 6038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fargs_priv = malloc(nb_tmp_fargs * sizeof(double)); 6039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // /* offset within [1-nb_tmp_fargs:nb_tmp_fargs] */ 6041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // for (i=1-nb_tmp_fargs; i<nb_tmp_fargs; i++) { 6042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_tmp_fargs; i++) { 6043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown offs = i * 8; // offset = i * sizeof(double) 6044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (i < 0) { 6045ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = fargs [nb_tmp_fargs-1 + i]; 6046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_dst = &fargs_priv[nb_tmp_fargs-1 + i]; 6047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&fargs_priv[nb_tmp_fargs-1]; 6048ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { 6049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = fargs [i]; 6050ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_dst = &fargs_priv[i]; 6051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base = (HWord_t)&fargs_priv[0]; 6052ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6053ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *p_dst = 0; // clear dst 6054ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown f14 = src; // read from fargs 6056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = base; // store to r15 + offs 6057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r16 = offs; 6058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown SET_CR_XER_ZERO; 6060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown GET_CR_XER(flags,xer); 6062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 6064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %016llx, %4d => %016llx, %4d", 6065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx, %4lld => %016llx, %4lld", 6067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6068ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, double_to_bits(src), r16/*offs*/, 6069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double_to_bits(*p_dst), r15-base); 6070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_FLOAT_FLAGS 6071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" (%08x %08x)", flags, xer); 6072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 6074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6075ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6076ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0 6077ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // print double precision result 6078ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 6079ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %016llx (%014e), %4d => %016llx (%014e), %08x (%08x %08x)\n", 6080ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx (%014e), %4d => %016llx (%014e), %08x (%08x %08x)\n", 6082ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6083ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, double_to_bits(src), src, offs, 6084ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double_to_bits(*p_dst), *p_dst, r15, flags, xer); 6085ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6086ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // print single precision result 6087ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __powerpc64__ 6088ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %016llx (%014e), %4d => %08x (%f), %08x (%08x %08x)\n", 6089ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf("%s %016llx (%014e), %4d => %08x (%f), %08x (%08x %08x)\n", 6091ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6092ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, double_to_bits(src), src, offs, 6093ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (uint32_t)(double_to_bits(*p_dst) >> 32), 6094ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown bits_to_float( (uint32_t)(double_to_bits(*p_dst) >> 32) ), 6095ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15, flags, xer); 6096ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6097ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6098ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown free(fargs_priv); 6099ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Used in do_tests, indexed by flags->nb_args 6103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Elements correspond to enum test_flags::num args 6104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/ 6105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_loop_t float_loops[] = { 6106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_float_one_arg, 6107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_float_two_args, 6108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_float_three_args, 6109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_float_two_args, 6110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 6111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 6112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_float_special, 6113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_float_ld_one_reg_imm16, 6114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_float_ld_two_regs, 6115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_float_st_two_regs_imm16, 6116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_float_st_three_regs, 6117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 6118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 6119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 6122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Ref: vector insns to test setting CR, VSCR: 6124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int v1 = 6125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF }; 6126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (vector unsigned int){ 0x80808080,0x80808080,0x80808080,0x80808080 }; 6127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int v2 = 6128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF }; 6129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (vector unsigned int){ 0x01010101,0x01010101,0x01010101,0x01010101 }; 6130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov //__asm__ __volatile__ ("vcmpequw. 31,%0,%1" : : "v" (v1), "v" (v2)); // sets CR[6] 6131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov //__asm__ __volatile__ ("vpkswss 31,%0,%1" : : "v" (v1), "v" (v2)); // sets VSCR[SAT] 6132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vsubsbs 31,%0,%1" : : "v" (v1), "v" (v2)); // sets VSCR[SAT] 6133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/ 6134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define DEFAULT_VSCR 0x00010000 6136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define DEFAULT_VSCR 0x0 6137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_av_int_one_arg (const char* name, test_func_t func, 6139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vec_in, vec_out, vscr; 6144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src, *dst; 6145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 6146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 6148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_viargs; i++) { 6151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in = (vector unsigned int)viargs[i]; 6156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector unsigned int){ 0,0,0,0 }; 6157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load input -> r14 6165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in)); 6166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 6171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = (unsigned int*)&vec_in; 6182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 6183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: %08x %08x %08x %08x\n", name, 6185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src[0], src[1], src[2], src[3]); 6186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: => %08x %08x %08x %08x ", name, 6187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst[0], dst[1], dst[2], dst[3]); 6188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_vscr = (unsigned int*)𝓋 6190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x, %08x)\n", flags, p_vscr[3]); 6191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 6193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_av_int_two_args (const char* name, test_func_t func, 6198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vec_in1, vec_in2, vec_out, vscr; 6203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src1, *src2, *dst; 6204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i,j; 6205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 6207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_viargs; i++) { 6210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in1 = (vector unsigned int)viargs[i]; 6211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_viargs; j++) { 6212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in2 = (vector unsigned int)viargs[j]; 6213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector unsigned int){ 0,0,0,0 }; 6214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load inputs -> r14,r15 6226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1)); 6227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2)); 6228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 6233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src1 = (unsigned int*)&vec_in1; 6244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src2 = (unsigned int*)&vec_in2; 6245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 6246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: ", name); 6248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]); 6249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]); 6250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: => %08x %08x %08x %08x ", name, 6251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst[0], dst[1], dst[2], dst[3]); 6252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_vscr = (unsigned int*)𝓋 6254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x, %08x)\n", flags, p_vscr[3]); 6255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 6257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 6260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_av_int_three_args (const char* name, test_func_t func, 6264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vec_in1, vec_in2, vec_in3, vec_out, vscr; 6269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src1, *src2, *src3, *dst; 6270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i,j,k; 6271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 6273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_viargs; i++) { 6276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in1 = (vector unsigned int)viargs[i]; 6277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_viargs; j++) { 6278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in2 = (vector unsigned int)viargs[j]; 6279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<nb_viargs; k++) { 6280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in3 = (vector unsigned int)viargs[k]; 6281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector unsigned int){ 0,0,0,0 }; 6282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load inputs -> r14,r15,r16 6294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1)); 6295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2)); 6296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 16,%0,%0" : : "v" (vec_in3)); 6297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 6302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src1 = (unsigned int*)&vec_in1; 6313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src2 = (unsigned int*)&vec_in2; 6314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src3 = (unsigned int*)&vec_in3; 6315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 6316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name, 6318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src1[0], src1[1], src1[2], src1[3], 6319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src2[0], src2[1], src2[2], src2[3], 6320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src3[0], src3[1], src3[2], src3[3]); 6321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: => %08x%08x%08x%08x ", name, 6323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst[0], dst[1], dst[2], dst[3]); 6324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_vscr = (unsigned int*)𝓋 6326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x, %08x)\n", flags, p_vscr[3]); 6327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 6329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 6332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void vs128_cb (const char* name, test_func_t func, 6338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned char vec_shft; 6343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vec_in1, vec_out, vscr; 6344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src1, *src2, *dst; 6345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i,j; 6346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 6348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_viargs; i++) { 6351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in1 = (vector unsigned int)viargs[i]; 6352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<8; j++) { 6353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* low-order 3bits of every byte must be the same for the shift vector */ 6354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_shft = (vector unsigned char) { j,j,j,j, j,j,j,j, j,j,j,j, j,j,j,j }; 6355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector unsigned int){ 0,0,0,0 }; 6356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load inputs -> r14,r15 6368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1)); 6369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_shft)); 6370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 6375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src1 = (unsigned int*)&vec_in1; 6386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src2 = (unsigned int*)&vec_shft; 6387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 6388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: ", name); 6390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]); 6391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]); 6392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: => %08x %08x %08x %08x ", name, 6394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst[0], dst[1], dst[2], dst[3]); 6395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_vscr = (unsigned int*)𝓋 6397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x, %08x)\n", flags, p_vscr[3]); 6398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 6400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 6403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void vsplt_cb (const char* name, test_func_t func_IN, 6407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 6410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 6411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vec_in1, vec_out, vscr; 6414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src1, *dst; 6415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i,j; 6416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 6418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_viargs; i++) { 6421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in1 = (vector unsigned int)viargs[i]; 6422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<16; j+=3) { 6424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector unsigned int){ 0,0,0,0 }; 6425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 6427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 6428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], j, 16, 5); 6429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load input -> r14 6441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1)); 6442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 6447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src1 = (unsigned int*)&vec_in1; 6458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 6459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: ", name); 6461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%08x %08x %08x %08x, %u\n", src1[0], src1[1], src1[2], src1[3], j); 6462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: => %08x %08x %08x %08x ", name, 6464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst[0], dst[1], dst[2], dst[3]); 6465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_vscr = (unsigned int*)𝓋 6467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x, %08x)\n", flags, p_vscr[3]); 6468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 6470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 6473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void vspltis_cb (const char* name, test_func_t func_IN, 6477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 6480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 6481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vec_out, vscr; 6484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *dst; 6485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 6486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 6488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<32; i++) { 6491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector unsigned int){ 0,0,0,0 }; 6492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 6494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 6495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], i, 16, 5); 6496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 6511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 6522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: %2d => ", name, i); 6524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 6525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_vscr = (unsigned int*)𝓋 6527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x, %08x)\n", flags, p_vscr[3]); 6528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 6530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void vsldoi_cb (const char* name, test_func_t func_IN, 6535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 6538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 6539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vec_in1, vec_in2, vec_out, vscr; 6542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src1, *src2, *dst; 6543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i,j,k; 6544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 6546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_viargs; i++) { 6549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in1 = (vector unsigned int)viargs[i]; 6550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_viargs; j++) { 6551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in2 = (vector unsigned int)viargs[j]; 6552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<16; k+=14) { 6553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector unsigned int){ 0,0,0,0 }; 6554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 6556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 6557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], k, 6, 4); 6558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load inputs -> r14,r15 6570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1)); 6571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2)); 6572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 6577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src1 = (unsigned int*)&vec_in1; 6588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src2 = (unsigned int*)&vec_in2; 6589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 6590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: ", name); 6592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%08x%08x%08x%08x, %08x%08x%08x%08x, %u\n", 6593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src1[0], src1[1], src1[2], src1[3], 6594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src2[0], src2[1], src2[2], src2[3], k); 6595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: => %08x %08x %08x %08x] ", name, 6597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst[0], dst[1], dst[2], dst[3]); 6598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_vscr = (unsigned int*)𝓋 6600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x, %08x)\n", flags, p_vscr[3]); 6601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 6603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 6606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* lvsl, lvsr */ 6611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void lvs_cb (const char *name, test_func_t func, 6612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vec_out, vscr; 6617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *dst; 6618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 6619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 6621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=-1; i<17; i++) { 6624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector unsigned int){ 0,0,0,0 }; 6625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // make sure start address is 16 aligned - use viargs[0] 6627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = (HWord_t)&viargs[0]; 6628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = i; 6629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 6644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 6655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %3d, %3d", name, i, 0); 6657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 6658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 6659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 6661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic special_t special_av_int_ops[] = { 6664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vsr", /* Two registers arguments */ 6666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vs128_cb, 6667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vsl", /* Two registers arguments */ 6670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vs128_cb, 6671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vspltb", /* One reg, one 5-bit uimm arguments */ 6674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vsplt_cb, 6675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vsplth", /* One reg, one 5-bit uimm arguments */ 6678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vsplt_cb, 6679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vspltw", /* One reg, one 5-bit uimm arguments */ 6682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vsplt_cb, 6683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vspltisb", /* One reg, one 5-bit uimm arguments */ 6686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vspltis_cb, 6687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vspltish", /* One reg, one 5-bit uimm arguments */ 6690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vspltis_cb, 6691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vspltisw", /* One reg, one 5-bit uimm arguments */ 6694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vspltis_cb, 6695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vsldoi", /* Two regs, one 4-bit uimm arguments */ 6698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vsldoi_cb, 6699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "lvsl", /* Two regs */ 6702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &lvs_cb, 6703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "lvsr", /* Two regs */ 6706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &lvs_cb, 6707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 6709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 6710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 6711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 6712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 6713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_av_int_special (const char* name, test_func_t func, 6715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t test_flags) 6716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_special(special_av_int_ops, name, func, test_flags); 6718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_av_int_ld_two_regs (const char *name, 6721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func, 6722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vec_in, vec_out, vscr; 6727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src, *dst; 6728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i,j, k, do_mask; 6729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_mask = 0; 6731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (strstr(name, "lvebx") != NULL) do_mask = 1; 6732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (strstr(name, "lvehx") != NULL) do_mask = 2; 6733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (strstr(name, "lvewx") != NULL) do_mask = 4; 6734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_viargs; i++) { 6736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<16; j+=7) { 6737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector unsigned int){ 0,0,0,0 }; 6738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load from viargs array + some dis-alignment 6740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = (HWord_t)&viargs[0]; 6741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = i*16 + j; 6742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 6757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in = (vector unsigned int)viargs[i]; 6768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = (unsigned int*)&vec_in; 6769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 6770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* For lvebx/lvehx/lvewx, as per the documentation, all of 6772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown the dest reg except the loaded bits are undefined 6773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown afterwards. And different CPUs really do produce 6774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown different results. So mask out bits of the result that 6775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown are undefined so as to make the test work reliably. */ 6776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (do_mask == 1) { 6777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown char* p = (char*)dst; 6778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k = 0; k < 16; k++) 6779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (k != j) 6780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p[k] = (char)0; 6781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (do_mask == 2) { 6783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown short* p = (short*)dst; 6784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k = 0; k < 8; k++) 6785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (k != (j>>1)) 6786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p[k] = (short)0; 6787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (do_mask == 4) { 6789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int* p = (int*)dst; 6790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k = 0; k < 4; k++) 6791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (k != (j>>2)) 6792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p[k] = (int)0; 6793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]); 6796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 6797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 6798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 6800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_av_int_st_three_regs (const char *name, 6805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_func_t func, 6806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vec_in, vec_out, vscr; 6811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src, *dst; 6812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i,j; 6813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vector unsigned int* viargs_priv; 6814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // private viargs table to store to 6816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown viargs_priv = memalign16(nb_viargs * sizeof(vector unsigned int)); 6817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_viargs; i++) 6818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown viargs_priv[i] = (vector unsigned int) { 0,0,0,0 }; 6819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_viargs; i++) { 6821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<16; j+=7) { 6822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // read from viargs 6823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in = (vector unsigned int)viargs[i]; 6824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // store to viargs_priv[0] + some dis-alignment 6826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r16 = (HWord_t)&viargs_priv[0]; 6827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = i*16 + j; 6828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load inputs -> r14 6840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in)); 6841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Output stored in viargs_priv 6846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector unsigned int)viargs_priv[i]; 6856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = (unsigned int*)&vec_in; 6857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 6858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]); 6860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 6861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 6862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 6864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Used in do_tests, indexed by flags->nb_args 6868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Elements correspond to enum test_flags::num args 6869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/ 6870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_loop_t altivec_int_loops[] = { 6871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_av_int_one_arg, 6872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_av_int_two_args, 6873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_av_int_three_args, 6874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_av_int_two_args, 6875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 6876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 6877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_av_int_special, 6878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 6879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_av_int_ld_two_regs, 6880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 6881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_av_int_st_three_regs, 6882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 6883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_av_float_one_arg (const char* name, test_func_t func, 6886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector float vec_in, vec_out; 6891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vscr; 6892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src, *dst; 6893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 6894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 6896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* if we're doing an estimation operation, arrange to zap the 6899663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng bottom 10-bits of the result as it's basically garbage, and differs 6900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown between cpus */ 6901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int mask 6902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown = (strstr(name,"vrsqrtefp") != NULL || 6903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown strstr(name, "vrefp") != NULL) 6904663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng ? 0xFFFFC000 : 0xFFFFFFFF; 6905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_vfargs; i++) { 6907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in = (vector float)vfargs[i]; 6908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 }; 6909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6918ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6919ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6920ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load input -> r14 6921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in)); 6922ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6923ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6924ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6925ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6926ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 6927ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6928ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6929ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6930ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6931ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6932ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6933ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6934ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6936ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6937ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = (unsigned int*)&vec_in; 6938ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 6939ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6940ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: %08x %08x %08x %08x\n", name, 6941ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src[0], src[1], src[2], src[3]); 6942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: => %08x %08x %08x %08x ", name, 6943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst[0] & mask, dst[1] & mask, dst[2] & mask, dst[3] & mask); 6944ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6945ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_vscr = (unsigned int*)𝓋 6946ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x, %08x)\n", flags, p_vscr[3]); 6947ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 6948ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 6949ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6950ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 6951ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 6952ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6953ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_av_float_two_args (const char* name, test_func_t func, 6954ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 6955ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6956ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 6957ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 6958ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector float vec_in1, vec_in2, vec_out; 6959ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vscr; 6960ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src1, *src2, *dst; 6961ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i,j; 6962ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 6963ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 6964ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 6965ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6966ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_vfargs; i++) { 6967ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_vfargs; j+=3) { 6968ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in1 = (vector float)vfargs[i]; 6969ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in2 = (vector float)vfargs[j]; 6970ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 }; 6971ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6972ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 6973ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6974ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6975ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6976ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 6977ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6978ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 6979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 6980ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6981ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6982ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load inputs -> r14,r15 6983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1)); 6984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2)); 6985ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6986ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 6987ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 6988ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6989ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 6990ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6991ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6992ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 6993ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6994ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6995ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6996ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 6997ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 6999ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7000ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src1 = (unsigned int*)&vec_in1; 7001ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src2 = (unsigned int*)&vec_in2; 7002ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 7003ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7004ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x\n", name, 7005ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src1[0], src1[1], src1[2], src1[3], 7006ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src2[0], src2[1], src2[2], src2[3]); 7007ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: => %08x %08x %08x %08x ", name, 7008ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst[0], dst[1], dst[2], dst[3]); 7009ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 7010ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_vscr = (unsigned int*)𝓋 7011ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x, %08x)\n", flags, p_vscr[3]); 7012ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 7013ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 7014ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 7015ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7016ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 7017ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7018ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 7019ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7020ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_av_float_three_args (const char* name, test_func_t func, 7021ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 7022ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 7023ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 7024ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 7025ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector float vec_in1, vec_in2, vec_in3, vec_out; 7026ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vscr; 7027ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src1, *src2, *src3, *dst; 7028663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng int i,j,k,n; 7029ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 7030ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 7031ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 7032ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7033ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_vfargs; i++) { 7034ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_vfargs; j+=3) { 7035ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<nb_vfargs; k+=5) { 7036ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in1 = (vector float)vfargs[i]; 7037ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in2 = (vector float)vfargs[j]; 7038ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in3 = (vector float)vfargs[k]; 7039ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 }; 7040ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7041ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 7042ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 7043ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 7044ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7045ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 7046ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 7047ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 7048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 7049ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 7050ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7051ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load inputs -> r14,r15,r16 7052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in1)); 7053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 15,%0,%0" : : "v" (vec_in2)); 7054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 16,%0,%0" : : "v" (vec_in3)); 7055ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7056ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 7057ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 7058ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7059ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 7060ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 7061ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7062ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 7063ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 7064ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 7065ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7066ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 7067ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 7068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 7069ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7070ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src1 = (unsigned int*)&vec_in1; 7071ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src2 = (unsigned int*)&vec_in2; 7072ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src3 = (unsigned int*)&vec_in3; 7073ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 7074ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7075663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Valgrind emulation for vmaddfp and vnmsubfp generates negative 7076663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * NAN. Technically, NAN is not positive or negative so mask off 7077663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * the sign bit to eliminate false errors. 7078663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * 7079663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * Valgrind emulation is creating negative zero. Mask off negative 7080663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * from zero result. 7081663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * 7082663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * These are only an issue as we are printing the result in hex. 7083663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * 7084663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * The VEX emulation accuracy for the vmaddfp and vnmsubfp 7085663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * instructions is off by a single bit in the least significant 7086663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * bit position of the result. Mask off the LSB. 7087663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng */ 7088663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 7089663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng for (n=0; n<4; n++) { 7090663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* NAN result*/ 7091663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng if (((dst[n] & 0x7F800000) == 0x7F800000) && 7092663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng ((dst[n] & 0x7FFFFF) != 0)) 7093663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng dst[n] &= 0x7FFFFFFF; 7094663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 7095663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Negative zero result */ 7096663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng else if (dst[n] == 0x80000000) 7097663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng dst[n] = 0x0; 7098663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 7099663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng else 7100663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* The actual result and the emulated result for the 7101663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * vmaddfp and vnmsubfp instructions sometimes differ 7102663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * in the least significant bit. Mask off the bit. 7103663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng */ 7104663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng dst[n] &= 0xFFFFFFFE; 7105663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng } 7106663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 7107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name, 7108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src1[0], src1[1], src1[2], src1[3], 7109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src2[0], src2[1], src2[2], src2[3], 7110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src3[0], src3[1], src3[2], src3[3]); 7111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: => %08x %08x %08x %08x ", name, 7112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst[0], dst[1], dst[2], dst[3]); 7113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 7114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_vscr = (unsigned int*)𝓋 7115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x, %08x)\n", flags, p_vscr[3]); 7116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 7117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 7118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 7119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 7121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 7124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void vcvt_cb (const char* name, test_func_t func_IN, 7126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 7127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 7128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile test_func_t func; 7129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t* func_buf = get_rwx_area(); 7130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t flags, tmpcr; 7131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int tmpvscr; 7132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile vector unsigned int vec_in, vec_out, vscr; 7133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int *src, *dst; 7134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i,j; 7135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 7136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int* p_vscr; 7137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 7138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_vfargs; i++) { 7140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_in = (vector unsigned int)vfargs[i]; 7141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<32; j+=9) { 7143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vec_out = (vector unsigned int){ 0,0,0,0 }; 7144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Patch up the instruction */ 7146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown func = init_function( func_IN, func_buf ); 7147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown patch_op_imm(&func_buf[0], j, 16, 5); 7148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 7150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 7151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 7152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // reset VSCR and CR 7154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 7155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = 0; 7156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (vscr) ); 7157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 7158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // load input -> r14 7160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("vor 14,%0,%0" : : "v" (vec_in)); 7161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do stuff 7163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 7164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // retrieve output <- r17 7166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 7167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // get CR,VSCR flags 7169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 7170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 7171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 7173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 7174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov __asm__ __volatile__ ("mtvscr %0" : : "v" (tmpvscr)); 7175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown src = (unsigned int*)&vec_in; 7177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dst = (unsigned int*)&vec_out; 7178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s: %08x (%13e), %2u", name, src[0], *(float*)(&src[0]), j); 7180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" => %08x (%13e) ", dst[0], *(float*)(&dst[0])); 7181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// printf(" => %08x ", dst[0]); 7182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined TEST_VSCR_SAT 7183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown p_vscr = (unsigned int*)𝓋 7184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x, %08x)\n", flags, p_vscr[3]); 7185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 7186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%08x)\n", flags); 7187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 7188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 7190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 7192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic special_t special_av_float_ops[] = { 7194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 7195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vcfux", /* One reg, one 5-bit uimm argument */ 7196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vcvt_cb, 7197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 7198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 7199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vcfsx", /* One reg, one 5-bit uimm argument */ 7200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vcvt_cb, 7201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 7202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 7203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vctuxs", /* One reg, one 5-bit uimm argument */ 7204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vcvt_cb, 7205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 7206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 7207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vcfux", /* One reg, one 5-bit uimm argument */ 7208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vcvt_cb, 7209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 7210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 7211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "vctsxs", /* One reg, one 5-bit uimm argument */ 7212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &vcvt_cb, 7213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 7214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { 7215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 7216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 7217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown }, 7218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 7219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_av_float_special (const char* name, test_func_t func, 7221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown uint32_t test_flags) 7222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 7223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_special(special_av_float_ops, name, func, test_flags); 7224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 7225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Used in do_tests, indexed by flags->nb_args 7227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Elements correspond to enum test_flags::num args 7228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/ 7229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic test_loop_t altivec_float_loops[] = { 7230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_av_float_one_arg, 7231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_av_float_two_args, 7232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_av_float_three_args, 7233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_av_float_two_args, 7234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 7235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 7236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &test_av_float_special, 7237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 7238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 7239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 7240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL, 7241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 7242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (HAS_ALTIVEC) */ 7244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (IS_PPC405) 7247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void test_ppc405 (const char* name, test_func_t func, 7248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unused uint32_t test_flags) 7249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 7250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown volatile uint32_t res, flags, xer, tmpcr, tmpxer; 7251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, k; 7252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; i<nb_iargs; i++) { 7254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; j<nb_iargs; j++) { 7255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k=0; k<nb_iargs; k++) { 7256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r14 = iargs[i]; 7257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r15 = iargs[j]; 7258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Beware: the third argument and the result 7259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * are in the same register 7260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 7261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r17 = iargs[k]; 7262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Save flags */ 7264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr 18"); 7265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmpcr = r18; 7266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfxer 18"); 7267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmpxer = r18; 7268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Set up flags for test */ 7270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r18 = 0; 7271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr 18"); 7272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtxer 18"); 7273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*func)(); 7274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfcr 18"); 7275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags = r18; 7276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mfxer 18"); 7277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown xer = r18; 7278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res = r17; 7279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Restore flags */ 7281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r18 = tmpcr; 7282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtcr 18"); 7283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r18 = tmpxer; 7284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ("mtxer 18"); 7285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n", 7287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, iargs[i], iargs[j], iargs[k], res, flags, xer); 7288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 7290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 7293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (IS_PPC405) */ 7294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic int check_filter (char *filter) 7296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 7297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown char *c; 7298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int ret = 1; 7299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (filter != NULL) { 7301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown c = strchr(filter, '*'); 7302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (c != NULL) { 7303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *c = '\0'; 7304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ret = 0; 7305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return ret; 7309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 7310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic int check_name (const char* name, const char *filter, 7312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int exact) 7313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 7314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int nlen, flen; 7315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int ret = 0; 7316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (filter != NULL) { 7318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (; isspace(*name); name++) 7319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 7320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown FDPRINTF("Check '%s' againt '%s' (%s match)\n", 7321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, filter, exact ? "exact" : "starting"); 7322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nlen = strlen(name); 7323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flen = strlen(filter); 7324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (exact) { 7325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (nlen == flen && memcmp(name, filter, flen) == 0) 7326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ret = 1; 7327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { 7328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (flen <= nlen && memcmp(name, filter, flen) == 0) 7329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ret = 1; 7330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { 7332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ret = 1; 7333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return ret; 7335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 7336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct insn_sel_flags_t_struct { 7340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int one_arg, two_args, three_args; 7341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int arith, logical, compare, ldst; 7342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int integer, floats, p405, altivec, faltivec; 7343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int cr; 7344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} insn_sel_flags_t; 7345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void do_tests ( insn_sel_flags_t seln_flags, 7347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown char *filter) 7348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 7349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (IS_PPC405) 7350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_loop_t tmpl; 7351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 7352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_loop_t *loop; 7353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_t *tests; 7354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int nb_args, type, family; 7355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, n; 7356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int exact; 7357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown exact = check_filter(filter); 7359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown n = 0; 7360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i=0; all_tests[i].name != NULL; i++) { 7361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown nb_args = all_tests[i].flags & PPC_NB_ARGS; 7362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Check number of arguments */ 7363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if ((nb_args == 1 && !seln_flags.one_arg) || 7364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (nb_args == 2 && !seln_flags.two_args) || 7365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (nb_args == 3 && !seln_flags.three_args)) 7366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 7367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Check instruction type */ 7368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown type = all_tests[i].flags & PPC_TYPE; 7369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if ((type == PPC_ARITH && !seln_flags.arith) || 7370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (type == PPC_LOGICAL && !seln_flags.logical) || 7371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (type == PPC_COMPARE && !seln_flags.compare) || 7372663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng (type == PPC_LDST && !seln_flags.ldst) || 7373663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng (type == PPC_POPCNT && !seln_flags.arith)) 7374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 7375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Check instruction family */ 7376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown family = all_tests[i].flags & PPC_FAMILY; 7377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if ((family == PPC_INTEGER && !seln_flags.integer) || 7378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (family == PPC_FLOAT && !seln_flags.floats) || 7379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (family == PPC_405 && !seln_flags.p405) || 7380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (family == PPC_ALTIVEC && !seln_flags.altivec) || 7381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (family == PPC_FALTIVEC && !seln_flags.faltivec)) 7382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 7383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Check flags update */ 7384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (((all_tests[i].flags & PPC_CR) && seln_flags.cr == 0) || 7385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (!(all_tests[i].flags & PPC_CR) && seln_flags.cr == 1)) 7386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 7387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* All passed, do the tests */ 7388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tests = all_tests[i].tests; 7389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Select the test loop */ 7390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown switch (family) { 7391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case PPC_INTEGER: 7392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown loop = &int_loops[nb_args - 1]; 7393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case PPC_FLOAT: 7395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (NO_FLOAT) 7396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown loop = &float_loops[nb_args - 1]; 7397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 7399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "Sorry. " 7400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC floating point instructions tests " 7401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "are disabled on your host\n"); 7402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* !defined (NO_FLOAT) */ 7403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case PPC_405: 7405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (IS_PPC405) 7406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmpl = &test_ppc405; 7407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown loop = &tmpl; 7408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 7410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "Sorry. " 7411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "PPC405 instructions tests are disabled on your host\n"); 7412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 7413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* defined (IS_PPC405) */ 7414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case PPC_ALTIVEC: 7415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 7416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown loop = &altivec_int_loops[nb_args - 1]; 7417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 7419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "Sorry. " 7420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Altivec instructions tests are disabled on your host\n"); 7421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 7422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 7423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case PPC_FALTIVEC: 7424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 7425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown loop = &altivec_float_loops[nb_args - 1]; 7426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 7428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "Sorry. " 7429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Altivec float instructions tests " 7430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "are disabled on your host\n"); 7431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 7432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 7433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown default: 7434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("ERROR: unknown insn family %08x\n", family); 7435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 7436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (1 || verbose > 0) 7438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%s:\n", all_tests[i].name); 7439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j=0; tests[j].name != NULL; j++) { 7440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (check_name(tests[j].name, filter, exact)) { 7441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose > 1) 7442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("Test instruction %s\n", tests[j].name); 7443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (*loop)(tests[j].name, tests[j].func, all_tests[i].flags); 7444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 7445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown n++; 7446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose) printf("\n"); 7449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("All done. Tested %d different instructions\n", n); 7451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 7452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void usage (void) 7455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 7456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (USAGE_SIMPLE) 7457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, 7458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "jm-insns [-1] [-2] [-3] [-*] [-t <type>] [-f <family>] [-u] " 7459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "[-n <filter>] [-r <test_rigour>] [-h]\n" 7460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-1: test opcodes with one argument\n" 7461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-2: test opcodes with two arguments\n" 7462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-3: test opcodes with three arguments\n" 7463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-*: launch test without checking the number of arguments\n" 7464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-t: launch test for instructions of type <type>\n" 7465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t recognized types:\n" 7466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\tarith (or a)\n" 7467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\tlogical (or l)\n" 7468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\tcompare (or c)\n" 7469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\tstoreload (or s)\n" 7470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-f: launch test for instructions of family <family>\n" 7471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t recognized families:\n" 7472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\tinteger (or i)\n" 7473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\tfloat (or f)\n" 7474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\tppc405 (or mac)\n" 7475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\taltivec (or a)\n" 7476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-u: test instructions that update flags\n" 7477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-n: filter instructions with <filter>\n" 7478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t <filter> can be in two forms:\n" 7479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\tname : filter functions that exactly match <name>\n" 7480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\tname* : filter functions that start with <name>\n" 7481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-r: set size of arg tables to use to define <test_rigour>\n" 7482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t recognized types:\n" 7483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\tlarge (or l)\n" 7484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t\tsmall (or s) - default\n" 7485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-v: verbose (-v -v for more)\n" 7486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-h: print this help\n" 7487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 7488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else // #if !defined (USAGE_SIMPLE) 7489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, 7490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "Usage: jm-insns [OPTION]\n" 7491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-i: test integer instructions (default)\n" 7492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-f: test floating point instructions\n" 7493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-a: test altivec instructions\n" 7494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-A: test all (int, fp, altivec) instructions\n" 7495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-v: be verbose\n" 7496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "\t-h: display this help and exit\n" 7497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 7498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #if !defined (USAGE_SIMPLE) 7499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 7500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main (int argc, char **argv) 7504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 7505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined (USAGE_SIMPLE) 7506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//////////////////////////////////////////////////////////////////////// 7507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned char *tmp, *filter = NULL; 7508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown insn_sel_flags_t flags; 7509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int c; 7510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // check HWord_t really is a host word 7512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(sizeof(void*) == sizeof(HWord_t)); 7513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.one_arg = 0; 7515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.two_args = 0; 7516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.three_args = 0; 7517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.arith = 0; 7518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.logical = 0; 7519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.compare = 0; 7520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.ldst = 0; 7521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.integer = 0; 7522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.floats = 0; 7523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.p405 = 0; 7524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.altivec = 0; 7525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.faltivec = 0; 7526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.cr = -1; 7527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown while ((c = getopt(argc, argv, "123t:f:n:r:uvh")) != -1) { 7529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown switch (c) { 7530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case '1': 7531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.one_arg = 1; 7532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case '2': 7534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.two_args = 1; 7535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case '3': 7537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.three_args = 1; 7538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 't': 7540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmp = optarg; 7541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (strcmp(tmp, "arith") == 0 || strcmp(tmp, "a") == 0) { 7542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.arith = 1; 7543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else if (strcmp(tmp, "logical") == 0 || strcmp(tmp, "l") == 0) { 7544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.logical = 1; 7545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else if (strcmp(tmp, "compare") == 0 || strcmp(tmp, "c") == 0) { 7546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.compare = 1; 7547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else if (strcmp(tmp, "storeload") == 0 || strcmp(tmp, "s") == 0) { 7548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.ldst = 1; 7549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { 7550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown goto bad_arg; 7551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'f': 7554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmp = optarg; 7555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (strcmp(tmp, "integer") == 0 || strcmp(tmp, "i") == 0) { 7556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.integer = 1; 7557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else if (strcmp(tmp, "float") == 0 || strcmp(tmp, "f") == 0) { 7558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.floats = 1; 7559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else if (strcmp(tmp, "ppc405") == 0 || strcmp(tmp, "mac") == 0) { 7560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.p405 = 1; 7561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else if (strcmp(tmp, "altivec") == 0 || strcmp(tmp, "a") == 0) { 7562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.altivec = 1; 7563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.faltivec = 1; 7564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { 7565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown goto bad_arg; 7566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'n': 7569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown filter = optarg; 7570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'r': 7572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown tmp = optarg; 7573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (strcmp(tmp, "large") == 0 || strcmp(tmp, "l") == 0) { 7574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_list_size = 1; 7575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else if (strcmp(tmp, "small") == 0 || strcmp(tmp, "s") == 0) { 7576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_list_size = 0; 7577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { 7578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown goto bad_arg; 7579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'u': 7583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.cr = 1; 7584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'h': 7586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown usage(); 7587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 7588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'v': 7589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown verbose++; 7590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown default: 7592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown usage(); 7593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "Unknown argument: '%c'\n", c); 7594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 1; 7595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown bad_arg: 7596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown usage(); 7597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "Bad argument for '%c': '%s'\n", c, tmp); 7598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 1; 7599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (argc != optind) { 7602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown usage(); 7603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "Bad number of arguments\n"); 7604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 1; 7605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Default n_args 7608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (flags.one_arg == 0 && flags.two_args == 0 && flags.three_args == 0) { 7609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.one_arg = 1; 7610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.two_args = 1; 7611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.three_args = 1; 7612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Default type 7614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (flags.arith == 0 && flags.logical == 0 && 7615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.compare == 0 && flags.ldst == 0) { 7616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.arith = 1; 7617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.logical = 1; 7618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.compare = 1; 7619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.ldst = 1; 7620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Default family 7622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (flags.integer == 0 && flags.floats == 0 && 7623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.p405 == 0 && flags.altivec == 0 && flags.faltivec == 0) { 7624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.integer = 1; 7625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.floats = 1; 7626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.p405 = 1; 7627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.altivec = 1; 7628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.faltivec = 1; 7629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Default cr update 7631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (flags.cr == -1) 7632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.cr = 2; // both 7633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else // #if !defined (USAGE_SIMPLE) 7635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//////////////////////////////////////////////////////////////////////// 7636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* Simple usage: 7637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ./jm-insns -i => int insns 7638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ./jm-insns -f => fp insns 7639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ./jm-insns -a => av insns 7640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ./jm-insns -A => int, fp and avinsns 7641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 7642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown char *filter = NULL; 7643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown insn_sel_flags_t flags; 7644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int c; 7645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Args 7647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.one_arg = 1; 7648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.two_args = 1; 7649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.three_args = 1; 7650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Type 7651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.arith = 1; 7652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.logical = 1; 7653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.compare = 1; 7654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.ldst = 1; 7655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Family 7656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.integer = 0; 7657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.floats = 0; 7658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.p405 = 0; 7659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.altivec = 0; 7660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.faltivec = 0; 7661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Flags 7662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.cr = 2; 7663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown while ((c = getopt(argc, argv, "ifahvA")) != -1) { 7665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown switch (c) { 7666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'i': 7667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.integer = 1; 7668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'f': 7670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.floats = 1; 7671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'a': 7673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.altivec = 1; 7674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.faltivec = 1; 7675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'A': 7677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.integer = 1; 7678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.floats = 1; 7679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.altivec = 1; 7680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown flags.faltivec = 1; 7681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'h': 7683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown usage(); 7684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 7685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 'v': 7686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown verbose++; 7687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown break; 7688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown default: 7689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown usage(); 7690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "Unknown argument: '%c'\n", c); 7691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 1; 7692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg_list_size = 0; 7696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // #if !defined (USAGE_SIMPLE) 7697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown build_iargs_table(); 7700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown build_fargs_table(); 7701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown build_ii16_table(); 7702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 7703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (flags.altivec || flags.faltivec) { 7704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown build_viargs_table(); 7705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown build_vfargs_table(); 7706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 7708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // dump_iargs(); 7709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // dump_iargs16(); 7710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // dump_vfargs(); 7711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (verbose > 1) { 7713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\nInstruction Selection:\n"); 7714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" n_args: \n"); 7715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" one_arg = %d\n", flags.one_arg); 7716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" two_args = %d\n", flags.two_args); 7717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" three_args = %d\n", flags.three_args); 7718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" type: \n"); 7719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" arith = %d\n", flags.arith); 7720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" logical = %d\n", flags.logical); 7721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" compare = %d\n", flags.compare); 7722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" ldst = %d\n", flags.ldst); 7723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" family: \n"); 7724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" integer = %d\n", flags.integer); 7725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" floats = %d\n", flags.floats); 7726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" p405 = %d\n", flags.p405); 7727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" altivec = %d\n", flags.altivec); 7728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" faltivec = %d\n", flags.faltivec); 7729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" cr update: \n"); 7730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" cr = %d\n", flags.cr); 7731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 7732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" num args: \n"); 7733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" iargs - %d\n", nb_iargs); 7734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" fargs - %d\n", nb_fargs); 7735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined (HAS_ALTIVEC) 7736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" viargs - %d\n", nb_viargs); 7737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" vfargs - %d\n", nb_vfargs); 7738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 7739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 7740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 7741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_tests( flags, filter ); 7743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 7745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 7746