jm-insns.c revision 8a43f81f6e42d3407ae9649a5b5c9ff801abdbe0
1a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* HOW TO COMPILE: 3a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjgcc -Winline -Wall -O -mregnames -DHAS_ALTIVEC -maltivec 5a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjThis program is useful, but the register usage conventions in 7a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjit are a complete dog. In particular, _patch_op_imm has to 8a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjbe inlined, else you wind up with it segfaulting in 9a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjcompletely different places due to corruption (of r20 in the 10a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjcase I chased). 11a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 12a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 13a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* 14a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * test-ppc.c: 15a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * PPC tests for qemu-PPC CPU emulation checks 16a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 17a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Copyright (c) 2005 Jocelyn Mayer 18a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 19a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * This program is free software; you can redistribute it and/or 20a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * modify it under the terms of the GNU General Public License V2 21a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * as published by the Free Software Foundation 22a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 23a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * This program is distributed in the hope that it will be useful, 24a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * but WITHOUT ANY WARRANTY; without even the implied warranty of 25a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 26a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * GNU General Public License for more details. 27a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 28a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * You should have received a copy of the GNU General Public License 29a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * along with this program; if not, write to the Free Software 30a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 31a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 32a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 33a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* 34a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Theory of operations: 35a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * a few registers are reserved for the test program: 36a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * r14 => r18 37a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * f14 => f18 38a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * I do preload test values in r14 thru r17 (or less, depending on the number 39a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * of register operands needed), patch the test opcode if any immediate 40a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * operands are required, execute the tested opcode. 41a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * XER, CCR and FPSCR are cleared before every test. 42a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * I always get the result in r17 and also save XER and CCR for fixed-point 43a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * operations. I also check FPSCR for floating points operations. 44a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 45a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Improvments: 46a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * a more clever FPSCR management is needed: for now, I always test 47a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * the round-to-zero case. Other rounding modes also need to be tested. 48a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 49a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 50a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* 51cfe949112586ed0423a6064ae91ad3046f282869cerion * Operation details 52cfe949112586ed0423a6064ae91ad3046f282869cerion * ----------------- 53a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * The 'test' functions (via all_tests[]) are wrappers of single asm instns 54a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 55a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * The 'loops' (e.g. int_loops) do the actual work: 56a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * - loops over as many arguments as the instn needs (regs | imms) 57a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * - sets up the environment (reset cr,xer, assign src regs...) 58a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * - maybe modifies the asm instn to test different imm args 59a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * - calls the test function 60a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * - retrieves relevant register data (rD,cr,xer,...) 61a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * - prints argument and result data. 62a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 63a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * More specifically... 64a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 65a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * all_tests[i] holds insn tests 66a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * - of which each holds: {instn_test_arr[], description, flags} 67a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 68a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * flags hold 3 instn classifiers: {family, type, arg_type} 69a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 70a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * // The main test loop: 71a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * do_tests( user_ctl_flags ) { 72a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * foreach(curr_test = all_test[i]) { 73a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 74a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * // flags are used to control what tests are run: 75a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * if (curr_test->flags && !user_ctl_flags) 76a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * continue; 77a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 78a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * // a 'loop_family_arr' is chosen based on the 'family' flag... 79a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * switch(curr_test->flags->family) { 80a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * case x: loop_family_arr = int_loops; 81a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * ... 82a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * } 83a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 84a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * // ...and the actual test_loop to run is found by indexing into 85a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * // the loop_family_arr with the 'arg_type' flag: 86a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * test_loop = loop_family[curr_test->flags->arg_type] 87a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 88a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * // finally, loop over all instn tests for this test: 89a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * foreach (instn_test = curr_test->instn_test_arr[i]) { 90a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 91a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * // and call the test_loop with the current instn_test function,name 92a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * test_loop( instn_test->func, instn_test->name ) 93a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * } 94a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * } 95a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * } 96cfe949112586ed0423a6064ae91ad3046f282869cerion * 97cfe949112586ed0423a6064ae91ad3046f282869cerion * 98cfe949112586ed0423a6064ae91ad3046f282869cerion * Details of intruction patching for immediate operands 99cfe949112586ed0423a6064ae91ad3046f282869cerion * ----------------------------------------------------- 100cfe949112586ed0423a6064ae91ad3046f282869cerion * All the immediate insn test functions are of the form {imm_insn, blr} 101cfe949112586ed0423a6064ae91ad3046f282869cerion * In order to patch one of these functions, we simply copy both insns 102cfe949112586ed0423a6064ae91ad3046f282869cerion * to a stack buffer, and rewrite the immediate part of imm_insn. 103cfe949112586ed0423a6064ae91ad3046f282869cerion * We then execute our stack buffer. 104cfe949112586ed0423a6064ae91ad3046f282869cerion * All ppc instructions are 32bits wide, which makes this fairly easy. 105cfe949112586ed0423a6064ae91ad3046f282869cerion * 106cfe949112586ed0423a6064ae91ad3046f282869cerion * Example: 107cfe949112586ed0423a6064ae91ad3046f282869cerion * extern void test_addi (void); 108cfe949112586ed0423a6064ae91ad3046f282869cerion * asm(".text\n" 109cfe949112586ed0423a6064ae91ad3046f282869cerion * "test_addi:\n" 110cfe949112586ed0423a6064ae91ad3046f282869cerion * "\taddi 17, 14, 0\n" 111cfe949112586ed0423a6064ae91ad3046f282869cerion * "\tblr\n" 112cfe949112586ed0423a6064ae91ad3046f282869cerion * ".previous\n" 113cfe949112586ed0423a6064ae91ad3046f282869cerion * ); 114cfe949112586ed0423a6064ae91ad3046f282869cerion * 115cfe949112586ed0423a6064ae91ad3046f282869cerion * We are interested only in: 116cfe949112586ed0423a6064ae91ad3046f282869cerion * "\taddi 17, 14, 0\n" 117cfe949112586ed0423a6064ae91ad3046f282869cerion * "\tblr\n" 118cfe949112586ed0423a6064ae91ad3046f282869cerion * 119cfe949112586ed0423a6064ae91ad3046f282869cerion * In a loop test, we may see: 120cfe949112586ed0423a6064ae91ad3046f282869cerion * uint32_t func_buf[2]; // our new stack based 'function' 121cfe949112586ed0423a6064ae91ad3046f282869cerion * uint32_t *p; // ptr to access insns by idx 122cfe949112586ed0423a6064ae91ad3046f282869cerion * for imm... // loop over imm 123cfe949112586ed0423a6064ae91ad3046f282869cerion * p = (void *)func; 124cfe949112586ed0423a6064ae91ad3046f282869cerion * func_buf[1] = p[1]; // copy 'blr' to func_buf[1] 125cfe949112586ed0423a6064ae91ad3046f282869cerion * patch_op_imm16(func_buf, p, imm); // patched 'addi' -> func_buf[0] 126cfe949112586ed0423a6064ae91ad3046f282869cerion * func = (void *)func_buf; // ptr to stack based insns 127cfe949112586ed0423a6064ae91ad3046f282869cerion * (*func)(); // exec our rewritten code 128cfe949112586ed0423a6064ae91ad3046f282869cerion * 129cfe949112586ed0423a6064ae91ad3046f282869cerion * patch_op_imm16() itself simply takes the uint32_t insn and overwrites 130cfe949112586ed0423a6064ae91ad3046f282869cerion * the immediate field with the new value (which, for 'addi', is the 131cfe949112586ed0423a6064ae91ad3046f282869cerion * low 16 bits). 132cfe949112586ed0423a6064ae91ad3046f282869cerion * 133cfe949112586ed0423a6064ae91ad3046f282869cerion * So in the loop test, if 'imm' is currently 9, and p[0] is: 134cfe949112586ed0423a6064ae91ad3046f282869cerion * 0x3A2E0000 => addi 17, 14, 0 135cfe949112586ed0423a6064ae91ad3046f282869cerion * 136cfe949112586ed0423a6064ae91ad3046f282869cerion * after patch_op_imm16(), func_buf[0] becomes: 137cfe949112586ed0423a6064ae91ad3046f282869cerion * 0x3A2E0009 => addi 17, 14, 9 138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 140586fb038935723146cb6950b38911aeb9fc12765cerion 141586fb038935723146cb6950b38911aeb9fc12765cerion/**********************************************************************/ 142586fb038935723146cb6950b38911aeb9fc12765cerion/* Uncomment to enable many arguments for altivec insns */ 143586fb038935723146cb6950b38911aeb9fc12765cerion#define USAGE_SIMPLE 144586fb038935723146cb6950b38911aeb9fc12765cerion 145586fb038935723146cb6950b38911aeb9fc12765cerion/* Uncomment to enable many arguments for altivec insns */ 146586fb038935723146cb6950b38911aeb9fc12765cerion//#define ALTIVEC_ARGS_LARGE 147586fb038935723146cb6950b38911aeb9fc12765cerion 148586fb038935723146cb6950b38911aeb9fc12765cerion/* Uncomment to enable output of CR flags for float tests */ 149586fb038935723146cb6950b38911aeb9fc12765cerion//#define TEST_FLOAT_FLAGS 150586fb038935723146cb6950b38911aeb9fc12765cerion 151586fb038935723146cb6950b38911aeb9fc12765cerion/* Uncomment to enable debug output */ 152586fb038935723146cb6950b38911aeb9fc12765cerion//#define DEBUG_ARGS_BUILD 153586fb038935723146cb6950b38911aeb9fc12765cerion//#define DEBUG_FILTER 154586fb038935723146cb6950b38911aeb9fc12765cerion 155586fb038935723146cb6950b38911aeb9fc12765cerion/* These should be set at build time */ 156586fb038935723146cb6950b38911aeb9fc12765cerion//#define NO_FLOAT 157586fb038935723146cb6950b38911aeb9fc12765cerion//#define HAS_ALTIVEC 158586fb038935723146cb6950b38911aeb9fc12765cerion//#define IS_PPC405 159586fb038935723146cb6950b38911aeb9fc12765cerion/**********************************************************************/ 160586fb038935723146cb6950b38911aeb9fc12765cerion 161586fb038935723146cb6950b38911aeb9fc12765cerion 162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdint.h> 163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f14 __asm__ ("f14"); 165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f15 __asm__ ("f15"); 166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f16 __asm__ ("f16"); 167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f17 __asm__ ("f17"); 168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f18 __asm__ ("f18"); 169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r14 __asm__ ("r14"); 170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r15 __asm__ ("r15"); 171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r16 __asm__ ("r16"); 172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r17 __asm__ ("r17"); 173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r18 __asm__ ("r18"); 174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj# include <altivec.h> 177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <assert.h> 179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <ctype.h> 180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <fcntl.h> 181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#include <fenv.h> 182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#include <math.h> 183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdio.h> 184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdlib.h> 185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <string.h> 186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <unistd.h> 187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <malloc.h> 188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1898a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion 1908a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#define ASSEMBLY_FUNC(__fname, __insn) \ 1918a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionasm(".section \".text\"\n" \ 1928a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion "\t.align 2\n" \ 1938a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion "\t.type "__fname",@function\n" \ 1948a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion __fname":\n" \ 1958a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion "\t"__insn"\n" \ 1968a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion "\tblr\n" \ 1978a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion "\t.previous\n" \ 1988a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion ) 1998a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion 2008a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion 201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- BEGIN #include "test-ppc.h" -------------- */ 202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* 203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * test-ppc.h: 204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * PPC tests for qemu-PPC CPU emulation checks - definitions 205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Copyright (c) 2005 Jocelyn Mayer 207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * This program is free software; you can redistribute it and/or 209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * modify it under the terms of the GNU General Public License V2 210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * as published by the Free Software Foundation 211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * This program is distributed in the hope that it will be useful, 213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * but WITHOUT ANY WARRANTY; without even the implied warranty of 214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * GNU General Public License for more details. 216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * You should have received a copy of the GNU General Public License 218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * along with this program; if not, write to the Free Software 219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (__TEST_PPC_H__) 223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define __TEST_PPC_H__ 224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdint.h> 226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef void (*test_func_t) (void); 228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct test_t test_t; 229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct test_table_t test_table_t; 230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct test_t { 231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func; 232530f73578552bc876a51fbf90cb6be29769bb362sewardj const char *name; 233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct test_table_t { 236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_t *tests; 237530f73578552bc876a51fbf90cb6be29769bb362sewardj const char *name; 238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t flags; 239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 241530f73578552bc876a51fbf90cb6be29769bb362sewardjtypedef void (*test_loop_t) (const char *name, test_func_t func, 242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t flags); 243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjenum test_flags { 245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Nb arguments */ 246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_ONE_ARG = 0x00000001, 247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_TWO_ARGS = 0x00000002, 248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_THREE_ARGS = 0x00000003, 249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_CMP_ARGS = 0x00000004, // family: compare 250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_CMPI_ARGS = 0x00000005, // family: compare 251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_TWO_I16 = 0x00000006, // family: arith/logical 252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_SPECIAL = 0x00000007, // family: logical 253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_LD_ARGS = 0x00000008, // family: ldst 254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_LDX_ARGS = 0x00000009, // family: ldst 255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_ST_ARGS = 0x0000000A, // family: ldst 256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_STX_ARGS = 0x0000000B, // family: ldst 257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_NB_ARGS = 0x0000000F, 258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Type */ 259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_ARITH = 0x00000100, 260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_LOGICAL = 0x00000200, 261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_COMPARE = 0x00000300, 262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_CROP = 0x00000400, 263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_LDST = 0x00000500, 264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_TYPE = 0x00000F00, 265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Family */ 266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_INTEGER = 0x00010000, 267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_FLOAT = 0x00020000, 268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_405 = 0x00030000, 269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_ALTIVEC = 0x00040000, 270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_FALTIVEC = 0x00050000, 271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_FAMILY = 0x000F0000, 272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Flags: these may be combined, so use separate bitfields. */ 273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_CR = 0x01000000, 274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_XER_CA = 0x02000000, 275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (__TEST_PPC_H__) */ 278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- END #include "test-ppc.h" -------------- */ 280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (DEBUG_ARGS_BUILD) 285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define AB_DPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0) 286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define AB_DPRINTF(fmt, args...) do { } while (0) 288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (DEBUG_FILTER) 291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define FDPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0) 292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define FDPRINTF(fmt, args...) do { } while (0) 294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2968a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion 297c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion/* Produce the 64-bit pattern corresponding to the supplied double. */ 298c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic uint64_t double_to_bits ( double d ) 299c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 300c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion union { uint64_t i; double d; } u; 301c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion assert(8 == sizeof(uint64_t)); 302c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion assert(8 == sizeof(double)); 303c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion assert(8 == sizeof(u)); 304c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion u.d = d; 305c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion return u.i; 306c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 307c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 308c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if 0 309c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic float bits_to_float ( uint32_t i ) 310c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 311c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion union { uint32_t i; float f; } u; 312c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion assert(4 == sizeof(uint32_t)); 313c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion assert(4 == sizeof(float)); 314c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion assert(4 == sizeof(u)); 315c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion u.i = i; 316c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion return u.f; 317c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 318c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif 319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3208a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion 3218a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#if defined (HAS_ALTIVEC) 3228a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionstatic void AB_DPRINTF_VEC32x4 ( vector unsigned int v ) 3238a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion{ 3248a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#if defined (DEBUG_ARGS_BUILD) 3258a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion int i; 3268a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion unsigned int* p_int = (unsigned int*)&v; 3278a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion AB_DPRINTF("val"); 3288a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion for (i=0; i<4; i++) { 3298a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion AB_DPRINTF(" %08x", p_int[i]); 3308a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion } 3318a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion AB_DPRINTF("\n"); 3328a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#endif 3338a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion} 3348a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion#endif 3358a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion 3368a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion 337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define unused __attribute__ (( unused )) 338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3398a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion 340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- BEGIN #include "ops-ppc.c" -------------- */ 341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* #include "test-ppc.h" */ 343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_add (void) 345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("add 17, 14, 15"); 347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addo (void) 350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addo 17, 14, 15"); 352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addc (void) 355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addc 17, 14, 15"); 357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addco (void) 360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addco 17, 14, 15"); 362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divw (void) 365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divw 17, 14, 15"); 367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwo (void) 370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwo 17, 14, 15"); 372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwu (void) 375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwu 17, 14, 15"); 377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwuo (void) 380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwuo 17, 14, 15"); 382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhw (void) 385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhw 17, 14, 15"); 387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhwu (void) 390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhwu 17, 14, 15"); 392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullw (void) 395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullw 17, 14, 15"); 397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullwo (void) 400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullwo 17, 14, 15"); 402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subf (void) 405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subf 17, 14, 15"); 407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfo (void) 410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfo 17, 14, 15"); 412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfc (void) 415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfc 17, 14, 15"); 417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfco (void) 420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfco 17, 14, 15"); 422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ia_ops_two[] = { 425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_add , " add", }, 426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addo , " addo", }, 427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addc , " addc", }, 428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addco , " addco", }, 429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divw , " divw", }, 430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwo , " divwo", }, 431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwu , " divwu", }, 432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwuo , " divwuo", }, 433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhw , " mulhw", }, 434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhwu , " mulhwu", }, 435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullw , " mullw", }, 436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullwo , " mullwo", }, 437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subf , " subf", }, 438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfo , " subfo", }, 439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfc , " subfc", }, 440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfco , " subfco", }, 441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_add_ (void) 445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("add. 17, 14, 15"); 447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addo_ (void) 450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addo. 17, 14, 15"); 452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addc_ (void) 455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addc. 17, 14, 15"); 457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addco_ (void) 460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addco. 17, 14, 15"); 462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divw_ (void) 465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divw. 17, 14, 15"); 467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwo_ (void) 470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwo. 17, 14, 15"); 472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwu_ (void) 475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwu. 17, 14, 15"); 477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwuo_ (void) 480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwuo. 17, 14, 15"); 482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhw_ (void) 485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhw. 17, 14, 15"); 487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhwu_ (void) 490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhwu. 17, 14, 15"); 492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullw_ (void) 495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullw. 17, 14, 15"); 497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullwo_ (void) 500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullwo. 17, 14, 15"); 502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subf_ (void) 505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subf. 17, 14, 15"); 507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfo_ (void) 510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfo. 17, 14, 15"); 512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfc_ (void) 515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfc. 17, 14, 15"); 517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfco_ (void) 520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfco. 17, 14, 15"); 522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iar_ops_two[] = { 525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_add_ , " add.", }, 526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addo_ , " addo.", }, 527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addc_ , " addc.", }, 528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addco_ , " addco.", }, 529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divw_ , " divw.", }, 530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwo_ , " divwo.", }, 531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwu_ , " divwu.", }, 532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwuo_ , " divwuo.", }, 533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhw_ , " mulhw.", }, 534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhwu_ , " mulhwu.", }, 535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullw_ , " mullw.", }, 536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullwo_ , " mullwo.", }, 537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subf_ , " subf.", }, 538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfo_ , " subfo.", }, 539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfc_ , " subfc.", }, 540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfco_ , " subfco.", }, 541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_adde (void) 545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("adde 17, 14, 15"); 547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addeo (void) 550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addeo 17, 14, 15"); 552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfe (void) 555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfe 17, 14, 15"); 557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfeo (void) 560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfeo 17, 14, 15"); 562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iac_ops_two[] = { 565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_adde , " adde", }, 566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addeo , " addeo", }, 567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfe , " subfe", }, 568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfeo , " subfeo", }, 569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_adde_ (void) 573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("adde. 17, 14, 15"); 575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addeo_ (void) 578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addeo. 17, 14, 15"); 580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfe_ (void) 583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfe. 17, 14, 15"); 585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfeo_ (void) 588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfeo. 17, 14, 15"); 590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iacr_ops_two[] = { 593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_adde_ , " adde.", }, 594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addeo_ , " addeo.", }, 595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfe_ , " subfe.", }, 596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfeo_ , " subfeo.", }, 597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_and (void) 601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("and 17, 14, 15"); 603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andc (void) 606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("andc 17, 14, 15"); 608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_eqv (void) 611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("eqv 17, 14, 15"); 613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nand (void) 616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nand 17, 14, 15"); 618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nor (void) 621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nor 17, 14, 15"); 623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_or (void) 626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("or 17, 14, 15"); 628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_orc (void) 631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("orc 17, 14, 15"); 633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xor (void) 636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("xor 17, 14, 15"); 638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_slw (void) 641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("slw 17, 14, 15"); 643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sraw (void) 646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("sraw 17, 14, 15"); 648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srw (void) 651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("srw 17, 14, 15"); 653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_two[] = { 656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_and , " and", }, 657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_andc , " andc", }, 658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_eqv , " eqv", }, 659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nand , " nand", }, 660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nor , " nor", }, 661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_or , " or", }, 662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_orc , " orc", }, 663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_xor , " xor", }, 664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_slw , " slw", }, 665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sraw , " sraw", }, 666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_srw , " srw", }, 667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_and_ (void) 671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("and. 17, 14, 15"); 673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andc_ (void) 676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("andc. 17, 14, 15"); 678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_eqv_ (void) 681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("eqv. 17, 14, 15"); 683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nand_ (void) 686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nand. 17, 14, 15"); 688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nor_ (void) 691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nor. 17, 14, 15"); 693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_or_ (void) 696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("or. 17, 14, 15"); 698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_orc_ (void) 701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("orc. 17, 14, 15"); 703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xor_ (void) 706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("xor. 17, 14, 15"); 708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_slw_ (void) 711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("slw. 17, 14, 15"); 713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sraw_ (void) 716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("sraw. 17, 14, 15"); 718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srw_ (void) 721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("srw. 17, 14, 15"); 723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_two[] = { 726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_and_ , " and.", }, 727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_andc_ , " andc.", }, 728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_eqv_ , " eqv.", }, 729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nand_ , " nand.", }, 730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nor_ , " nor.", }, 731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_or_ , " or.", }, 732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_orc_ , " orc.", }, 733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_xor_ , " xor.", }, 734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_slw_ , " slw.", }, 735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sraw_ , " sraw.", }, 736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_srw_ , " srw.", }, 737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7408a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionstatic void test_cmpw (void) 741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 7428a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion __asm__ __volatile__ ("cmpw 2, 14, 15"); 743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7458a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionstatic void test_cmplw (void) 746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 7478a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion __asm__ __volatile__ ("cmplw 2, 14, 15"); 748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_icr_ops_two[] = { 7518a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion { &test_cmpw , " cmpw", }, 7528a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion { &test_cmplw , " cmplw", }, 753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7568a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionextern void test_cmpwi (void); 7578a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_cmpwi", "cmpwi 2, 14, 0"); 7588a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion 7598a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionextern void test_cmplwi (void); 7608a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_cmplwi", "cmplwi 2, 14, 0"); 761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_icr_ops_two_i16[] = { 7638a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion { &test_cmpwi , " cmpwi", }, 7648a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion { &test_cmplwi , " cmplwi", }, 765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 76857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addi (void); 7698a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addi", "addi 17, 14, 0"); 77057778621b9d85c82fcb5185ba146add1715c5432sewardj 77157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addic (void); 7728a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addic", "addic 17, 14, 0"); 77357778621b9d85c82fcb5185ba146add1715c5432sewardj 77457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addis (void); 7758a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addis", "addis 17, 14, 0"); 77657778621b9d85c82fcb5185ba146add1715c5432sewardj 77757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mulli (void); 7788a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mulli", "mulli 17, 14, 0"); 77957778621b9d85c82fcb5185ba146add1715c5432sewardj 78057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_subfic (void); 7818a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_subfic", "subfic 17, 14, 0"); 782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ia_ops_two_i16[] = { 784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addi , " addi", }, 785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addic , " addic", }, 786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addis , " addis", }, 787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulli , " mulli", }, 788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfic , " subfic", }, 789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 79257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_addic_ (void); 7938a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_addic_", "addic. 17, 14, 0"); 794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iar_ops_two_i16[] = { 796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addic_ , " addic.", }, 797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 80057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_ori (void); 8018a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_ori", "ori 17, 14, 0"); 80257778621b9d85c82fcb5185ba146add1715c5432sewardj 80357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_oris (void); 8048a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_oris", "oris 17, 14, 0"); 80557778621b9d85c82fcb5185ba146add1715c5432sewardj 80657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_xori (void); 8078a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_xori", "xori 17, 14, 0"); 80857778621b9d85c82fcb5185ba146add1715c5432sewardj 80957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_xoris (void); 8108a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_xoris", "xoris 17, 14, 0"); 811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_two_i16[] = { 813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_ori , " ori", }, 814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_oris , " oris", }, 815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_xori , " xori", }, 816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_xoris , " xoris", }, 817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 82057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_andi_ (void); 8218a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_andi_", "andi. 17, 14, 0"); 82257778621b9d85c82fcb5185ba146add1715c5432sewardj 82357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_andis_ (void); 8248a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_andis_", "andis. 17, 14, 0"); 825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_two_i16[] = { 827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_andi_ , " andi.", }, 828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_andis_ , " andis.", }, 829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crand (void) 833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crand 17, 14, 15"); 835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crandc (void) 838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crandc 17, 14, 15"); 840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_creqv (void) 843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("creqv 17, 14, 15"); 845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crnand (void) 848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crnand 17, 14, 15"); 850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crnor (void) 853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crnor 17, 14, 15"); 855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cror (void) 858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("cror 17, 14, 15"); 860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crorc (void) 863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crorc 17, 14, 15"); 865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crxor (void) 868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crxor 17, 14, 15"); 870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_crl_ops_two[] = { 873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crand , " crand", }, 874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crandc , " crandc", }, 875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_creqv , " creqv", }, 876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crnand , " crnand", }, 877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crnor , " crnor", }, 878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_cror , " cror", }, 879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crorc , " crorc", }, 880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crxor , " crxor", }, 881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addme (void) 885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addme 17, 14"); 887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addmeo (void) 890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addmeo 17, 14"); 892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addze (void) 895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addze 17, 14"); 897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addzeo (void) 900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addzeo 17, 14"); 902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfme (void) 905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfme 17, 14"); 907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfmeo (void) 910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfmeo 17, 14"); 912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfze (void) 915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfze 17, 14"); 917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfzeo (void) 920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfzeo 17, 14"); 922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iac_ops_one[] = { 925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addme , " addme", }, 926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addmeo , " addmeo", }, 927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addze , " addze", }, 928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addzeo , " addzeo", }, 929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfme , " subfme", }, 930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfmeo , " subfmeo", }, 931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfze , " subfze", }, 932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfzeo , " subfzeo", }, 933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addme_ (void) 937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addme. 17, 14"); 939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addmeo_ (void) 942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addmeo. 17, 14"); 944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addze_ (void) 947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addze. 17, 14"); 949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addzeo_ (void) 952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addzeo. 17, 14"); 954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfme_ (void) 957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfme. 17, 14"); 959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfmeo_ (void) 962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfmeo. 17, 14"); 964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfze_ (void) 967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfze. 17, 14"); 969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfzeo_ (void) 972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfzeo. 17, 14"); 974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iacr_ops_one[] = { 977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addme_ , " addme.", }, 978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addmeo_ , " addmeo.", }, 979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addze_ , " addze.", }, 980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addzeo_ , " addzeo.", }, 981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfme_ , " subfme.", }, 982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfmeo_ , " subfmeo.", }, 983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfze_ , " subfze.", }, 984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfzeo_ , " subfzeo.", }, 985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cntlzw (void) 989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("cntlzw 17, 14"); 991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsb (void) 994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("extsb 17, 14"); 996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsh (void) 999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("extsh 17, 14"); 1001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_neg (void) 1004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("neg 17, 14"); 1006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nego (void) 1009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nego 17, 14"); 1011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_one[] = { 1014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_cntlzw , " cntlzw", }, 1015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_extsb , " extsb", }, 1016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_extsh , " extsh", }, 1017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_neg , " neg", }, 1018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nego , " nego", }, 1019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cntlzw_ (void) 1023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("cntlzw. 17, 14"); 1025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsb_ (void) 1028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("extsb. 17, 14"); 1030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsh_ (void) 1033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("extsh. 17, 14"); 1035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_neg_ (void) 1038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("neg. 17, 14"); 1040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nego_ (void) 1043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nego. 17, 14"); 1045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_one[] = { 1048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_cntlzw_ , " cntlzw.", }, 1049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_extsb_ , " extsb.", }, 1050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_extsh_ , " extsh.", }, 1051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_neg_ , " neg.", }, 1052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nego_ , " nego.", }, 1053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 105657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwimi (void); 10578a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwimi", "rlwimi 17, 14, 0, 0, 0"); 105857778621b9d85c82fcb5185ba146add1715c5432sewardj 105957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwinm (void); 10608a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwinm", "rlwinm 17, 14, 0, 0, 0"); 106157778621b9d85c82fcb5185ba146add1715c5432sewardj 106257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwnm (void); 10638a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwnm", "rlwnm 17, 14, 15, 0, 0"); 106457778621b9d85c82fcb5185ba146add1715c5432sewardj 106557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_srawi (void); 10668a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_srawi", "srawi 17, 14, 0"); 1067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mfcr (void) 1069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 17"); 1071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mfspr (void) 1074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfspr 17, 1"); 1076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mtspr (void) 1079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtspr 1, 14"); 1081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_spe[] = { 1084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwimi , " rlwimi", }, 1085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwinm , " rlwinm", }, 1086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwnm , " rlwnm", }, 1087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_srawi , " srawi", }, 1088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mfcr , " mfcr", }, 1089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mfspr , " mfspr", }, 1090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mtspr , " mtspr", }, 1091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 109457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwimi_ (void); 10958a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwimi_", "rlwimi. 17, 14, 0, 0, 0"); 109657778621b9d85c82fcb5185ba146add1715c5432sewardj 109757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwinm_ (void); 10988a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwinm_", "rlwinm. 17, 14, 0, 0, 0"); 109957778621b9d85c82fcb5185ba146add1715c5432sewardj 110057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_rlwnm_ (void); 11018a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_rlwnm_", "rlwnm. 17, 14, 15, 0, 0"); 110257778621b9d85c82fcb5185ba146add1715c5432sewardj 110357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_srawi_ (void); 11048a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_srawi_", "srawi. 17, 14, 0"); 110557778621b9d85c82fcb5185ba146add1715c5432sewardj 110657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mcrf (void); 11078a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mcrf", "mcrf 0, 0"); 110857778621b9d85c82fcb5185ba146add1715c5432sewardj 110957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mcrxr (void); 11108a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mcrxr", "mcrxr 0"); 111157778621b9d85c82fcb5185ba146add1715c5432sewardj 111257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_mtcrf (void); 11138a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_mtcrf", "mtcrf 0, 14"); 1114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_spe[] = { 1116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwimi_ , " rlwimi.", }, 1117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwinm_ , " rlwinm.", }, 1118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwnm_ , " rlwnm.", }, 1119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_srawi_ , " srawi.", }, 1120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mcrf , " mcrf", }, 1121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mcrxr , " mcrxr", }, 1122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mtcrf , " mtcrf", }, 1123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 112657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lbz (void); 11278a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lbz", "lbz 17,0(14)"); 112857778621b9d85c82fcb5185ba146add1715c5432sewardj 112957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lbzu (void); 11308a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lbzu", "lbzu 17,0(14)"); 113157778621b9d85c82fcb5185ba146add1715c5432sewardj 113257778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lha (void); 11338a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lha", "lha 17,0(14)"); 113457778621b9d85c82fcb5185ba146add1715c5432sewardj 113557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lhau (void); 11368a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lhau", "lhau 17,0(14)"); 113757778621b9d85c82fcb5185ba146add1715c5432sewardj 113857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lhz (void); 11398a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lhz", "lhz 17,0(14)"); 114057778621b9d85c82fcb5185ba146add1715c5432sewardj 114157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lhzu (void); 11428a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lhzu", "lhzu 17,0(14)"); 114357778621b9d85c82fcb5185ba146add1715c5432sewardj 114457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lwz (void); 11458a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lwz", "lwz 17,0(14)"); 114657778621b9d85c82fcb5185ba146add1715c5432sewardj 114757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_lwzu (void); 11488a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lwzu", "lwzu 17,0(14)"); 1149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ild_ops_two_i16[] = { 1151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lbz , " lbz", }, 1152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lbzu , " lbzu", }, 1153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lha , " lha", }, 1154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhau , " lhau", }, 1155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhz , " lhz", }, 1156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhzu , " lhzu", }, 1157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lwz , " lwz", }, 1158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lwzu , " lwzu", }, 1159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzx (void) 1163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lbzx 17,14,15"); 1165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzux (void) 1168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lbzux 17,14,15"); 1170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhax (void) 1173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lhax 17,14,15"); 1175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhaux (void) 1178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lhaux 17,14,15"); 1180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzx (void) 1183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lhzx 17,14,15"); 1185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzux (void) 1188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lhzux 17,14,15"); 1190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzx (void) 1193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lwzx 17,14,15"); 1195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzux (void) 1198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lwzux 17,14,15"); 1200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ild_ops_two[] = { 1203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lbzx , " lbzx", }, 1204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lbzux , " lbzux", }, 1205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhax , " lhax", }, 1206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhaux , " lhaux", }, 1207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhzx , " lhzx", }, 1208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhzux , " lhzux", }, 1209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lwzx , " lwzx", }, 1210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lwzux , " lwzux", }, 1211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 121457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stb (void); 12158a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stb", "stb 14,0(15)"); 121657778621b9d85c82fcb5185ba146add1715c5432sewardj 121757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stbu (void); 12188a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stbu", "stbu 14,0(15)"); 121957778621b9d85c82fcb5185ba146add1715c5432sewardj 122057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_sth (void); 12218a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_sth", "sth 14,0(15)"); 122257778621b9d85c82fcb5185ba146add1715c5432sewardj 122357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_sthu (void); 12248a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_sthu", "sthu 14,0(15)"); 122557778621b9d85c82fcb5185ba146add1715c5432sewardj 122657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stw (void); 12278a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stw", "stw 14,0(15)"); 122857778621b9d85c82fcb5185ba146add1715c5432sewardj 122957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_stwu (void); 12308a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stwu", "stwu 14,0(15)"); 1231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ist_ops_three_i16[] = { 1233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stb , " stb", }, 1234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stbu , " stbu", }, 1235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sth , " sth", }, 1236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sthu , " sthu", }, 1237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stw , " stw", }, 1238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stwu , " stwu", }, 1239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbx (void) 1243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stbx 14,15,16"); 1245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbux (void) 1248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stbux 14,15,16"); 1250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthx (void) 1253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("sthx 14,15,16"); 1255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthux (void) 1258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("sthux 14,15,16"); 1260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwx (void) 1263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stwx 14,15,16"); 1265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwux (void) 1268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stwux 14,15,16"); 1270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ist_ops_three[] = { 1273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stbx , " stbx", }, 1274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stbux , " stbux", }, 1275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sthx , " sthx", }, 1276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sthux , " sthux", }, 1277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stwx , " stwx", }, 1278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stwux , " stwux", }, 1279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsel (void) 1284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsel 17, 14, 15, 16"); 1286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadd (void) 1289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmadd 17, 14, 15, 16"); 1291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadds (void) 1294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmadds 17, 14, 15, 16"); 1296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsub (void) 1299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmsub 17, 14, 15, 16"); 1301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsubs (void) 1304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmsubs 17, 14, 15, 16"); 1306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadd (void) 1309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmadd 17, 14, 15, 16"); 1311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadds (void) 1314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmadds 17, 14, 15, 16"); 1316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsub (void) 1319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmsub 17, 14, 15, 16"); 1321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsubs (void) 1324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmsubs 17, 14, 15, 16"); 1326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_three[] = { 1329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsel , " fsel", }, 1330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmadd , " fmadd", }, 1331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmadds , " fmadds", }, 1332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmsub , " fmsub", }, 1333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmsubs , " fmsubs", }, 1334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmadd , " fnmadd", }, 1335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmadds , " fnmadds", }, 1336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmsub , " fnmsub", }, 1337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmsubs , " fnmsubs", }, 1338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsel_ (void) 1344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsel. 17, 14, 15, 16"); 1346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadd_ (void) 1349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmadd. 17, 14, 15, 16"); 1351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadds_ (void) 1354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmadds. 17, 14, 15, 16"); 1356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsub_ (void) 1359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmsub. 17, 14, 15, 16"); 1361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsubs_ (void) 1364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmsubs. 17, 14, 15, 16"); 1366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadd_ (void) 1369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmadd. 17, 14, 15, 16"); 1371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadds_ (void) 1374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmadds. 17, 14, 15, 16"); 1376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsub_ (void) 1379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmsub. 17, 14, 15, 16"); 1381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsubs_ (void) 1384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmsubs. 17, 14, 15, 16"); 1386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_three[] = { 1389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsel_ , " fsel.", }, 1390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmadd_ , " fmadd.", }, 1391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmadds_ , " fmadds.", }, 1392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmsub_ , " fmsub.", }, 1393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmsubs_ , " fmsubs.", }, 1394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmadd_ , " fnmadd.", }, 1395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmadds_ , " fnmadds.", }, 1396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmsub_ , " fnmsub.", }, 1397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmsubs_ , " fnmsubs.", }, 1398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadd (void) 1404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fadd 17, 14, 15"); 1406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadds (void) 1409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fadds 17, 14, 15"); 1411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsub (void) 1414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsub 17, 14, 15"); 1416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsubs (void) 1419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsubs 17, 14, 15"); 1421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmul (void) 1424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmul 17, 14, 15"); 1426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmuls (void) 1429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmuls 17, 14, 15"); 1431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdiv (void) 1434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fdiv 17, 14, 15"); 1436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdivs (void) 1439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fdivs 17, 14, 15"); 1441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_two[] = { 1444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fadd , " fadd", }, 1445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fadds , " fadds", }, 1446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsub , " fsub", }, 1447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsubs , " fsubs", }, 1448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmul , " fmul", }, 1449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmuls , " fmuls", }, 1450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fdiv , " fdiv", }, 1451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fdivs , " fdivs", }, 1452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadd_ (void) 1458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fadd. 17, 14, 15"); 1460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadds_ (void) 1463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fadds. 17, 14, 15"); 1465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsub_ (void) 1468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsub. 17, 14, 15"); 1470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsubs_ (void) 1473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsubs. 17, 14, 15"); 1475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmul_ (void) 1478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmul. 17, 14, 15"); 1480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmuls_ (void) 1483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmuls. 17, 14, 15"); 1485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdiv_ (void) 1488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fdiv. 17, 14, 15"); 1490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdivs_ (void) 1493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fdivs. 17, 14, 15"); 1495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_two[] = { 1498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fadd_ , " fadd.", }, 1499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fadds_ , " fadds.", }, 1500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsub_ , " fsub.", }, 1501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsubs_ , " fsubs.", }, 1502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmul_ , " fmul.", }, 1503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmuls_ , " fmuls.", }, 1504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fdiv_ , " fdiv.", }, 1505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fdivs_ , " fdivs.", }, 1506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fcmpo (void) 1512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fcmpo 2, 14, 15"); 1514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fcmpu (void) 1517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fcmpu 2, 14, 15"); 1519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fcr_ops_two[] = { 1522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fcmpo , " fcmpo", }, 1523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fcmpu , " fcmpu", }, 1524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 152905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 153005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0 // TODO: Not yet supported 1531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fres (void) 1532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fres 17, 14"); 1534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsqrte (void) 1537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("frsqrte 17, 14"); 1539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 154005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif 1541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsp (void) 1543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("frsp 17, 14"); 1545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiw (void) 1548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fctiw 17, 14"); 1550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiwz (void) 1553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fctiwz 17, 14"); 1555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmr (void) 1558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmr 17, 14"); 1560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fneg (void) 1563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fneg 17, 14"); 1565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fabs (void) 1568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fabs 17, 14"); 1570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnabs (void) 1573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnabs 17, 14"); 1575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1577586fb038935723146cb6950b38911aeb9fc12765cerionstatic void test_fsqrt (void) 1578586fb038935723146cb6950b38911aeb9fc12765cerion{ 1579586fb038935723146cb6950b38911aeb9fc12765cerion __asm__ __volatile__ ("fsqrt 17, 14"); 1580586fb038935723146cb6950b38911aeb9fc12765cerion} 1581586fb038935723146cb6950b38911aeb9fc12765cerion 1582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_one[] = { 158305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // { &test_fres , " fres", }, // TODO: Not yet supported 158405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // { &test_frsqrte , " frsqrte", }, // TODO: Not yet supported 1585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_frsp , " frsp", }, 1586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fctiw , " fctiw", }, 1587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fctiwz , " fctiwz", }, 1588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmr , " fmr", }, 1589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fneg , " fneg", }, 1590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fabs , " fabs", }, 1591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnabs , " fnabs", }, 1592586fb038935723146cb6950b38911aeb9fc12765cerion { &test_fsqrt , " fsqrt", }, 1593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 159805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 159905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0 // TODO: Not yet supported 1600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fres_ (void) 1601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fres. 17, 14"); 1603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsqrte_ (void) 1606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("frsqrte. 17, 14"); 1608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 160905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif 1610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsp_ (void) 1612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("frsp. 17, 14"); 1614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiw_ (void) 1617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fctiw. 17, 14"); 1619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiwz_ (void) 1622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fctiwz. 17, 14"); 1624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmr_ (void) 1627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmr. 17, 14"); 1629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fneg_ (void) 1632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fneg. 17, 14"); 1634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fabs_ (void) 1637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fabs. 17, 14"); 1639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnabs_ (void) 1642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnabs. 17, 14"); 1644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_one[] = { 164705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // { &test_fres_ , " fres.", }, // TODO: Not yet supported 164805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // { &test_frsqrte_ , " frsqrte.", }, // TODO: Not yet supported 1649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_frsp_ , " frsp.", }, 1650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fctiw_ , " fctiw.", }, 1651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fctiwz_ , " fctiwz.", }, 1652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmr_ , " fmr.", }, 1653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fneg_ , " fneg.", }, 1654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fabs_ , " fabs.", }, 1655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnabs_ , " fnabs.", }, 1656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fl_ops_spe[] = { 1662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_flr_ops_spe[] = { 1668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1672c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1673c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT) 1674c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfs (void); 16758a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfs", "lfs 17,0(14)"); 1676c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1677c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfsu (void); 16788a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfsu", "lfsu 17,0(14)"); 1679c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1680c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfd (void); 16818a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfd", "lfd 17,0(14)"); 1682c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1683c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_lfdu (void); 16848a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_lfdu", "lfdu 17,0(14)"); 1685c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1686c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fld_ops_two_i16[] = { 1687c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_lfs , " lfs", }, 1688c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_lfsu , " lfsu", }, 1689c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_lfd , " lfd", }, 1690c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_lfdu , " lfdu", }, 1691c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { NULL, NULL, }, 1692c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}; 1693c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */ 1694c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1695c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT) 1696c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfsx (void) 1697c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 1698c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("lfsx 17,14,15"); 1699c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 1700c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1701c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfsux (void) 1702c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 1703c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("lfsux 17,14,15"); 1704c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 1705c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1706c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfdx (void) 1707c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 1708c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("lfdx 17,14,15"); 1709c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 1710c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1711c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_lfdux (void) 1712c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 1713c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("lfdux 17,14,15"); 1714c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 1715c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1716c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fld_ops_two[] = { 1717c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_lfsx , " lfsx", }, 1718c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_lfsux , " lfsux", }, 1719c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_lfdx , " lfdx", }, 1720c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_lfdux , " lfdux", }, 1721c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { NULL, NULL, }, 1722c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}; 1723c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */ 1724c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1725c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT) 1726c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfs (void); 17278a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfs", "stfs 14,0(15)"); 1728c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1729c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfsu (void); 17308a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfsu", "stfsu 14,0(15)"); 1731c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1732c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfd (void); 17338a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfd", "stfd 14,0(15)"); 1734c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1735c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionextern void test_stfdu (void); 17368a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_stfdu", "stfdu 14,0(15)"); 1737c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1738c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fst_ops_three_i16[] = { 1739586fb038935723146cb6950b38911aeb9fc12765cerion { &test_stfs , " stfs", }, 1740586fb038935723146cb6950b38911aeb9fc12765cerion { &test_stfsu , " stfsu", }, 1741c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_stfd , " stfd", }, 1742c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_stfdu , " stfdu", }, 1743c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { NULL, NULL, }, 1744c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}; 1745c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */ 1746c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1747c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT) 1748c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfsx (void) 1749c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 1750c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("stfsx 14,15,16"); 1751c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 1752c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1753c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfsux (void) 1754c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 1755c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("stfsux 14,15,16"); 1756c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 1757c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1758c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfdx (void) 1759c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 1760c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("stfdx 14,15,16"); 1761c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 1762c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1763c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_stfdux (void) 1764c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 1765c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("stfdux 14,15,16"); 1766c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 1767c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1768c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic test_t tests_fst_ops_three[] = { 1769586fb038935723146cb6950b38911aeb9fc12765cerion { &test_stfsx , " stfsx", }, 1770586fb038935723146cb6950b38911aeb9fc12765cerion { &test_stfsux , " stfsux", }, 1771c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_stfdx , " stfdx", }, 1772c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { &test_stfdux , " stfdux", }, 1773c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { NULL, NULL, }, 1774c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion}; 1775c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */ 1776c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1777c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 1778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 1779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmhaddshs (void) 1780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmhaddshs 17, 14, 15, 16"); 1782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmhraddshs (void) 1785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmhraddshs 17, 14, 15, 16"); 1787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmladduhm (void) 1790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmladduhm 17, 14, 15, 16"); 1792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumubm (void) 1795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsumubm 17, 14, 15, 16"); 1797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumuhm (void) 1800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsumuhm 17, 14, 15, 16"); 1802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumshs (void) 1805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsumshs 17, 14, 15, 16"); 1807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumuhs (void) 1810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsumuhs 17, 14, 15, 16"); 1812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsummbm (void) 1815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsummbm 17, 14, 15, 16"); 1817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumshm (void) 1820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsumshm 17, 14, 15, 16"); 1822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_aa_ops_three[] = { 1825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmhaddshs , " vmhaddshs", }, 1826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmhraddshs , " vmhraddshs", }, 1827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmladduhm , " vmladduhm", }, 1828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsumubm , " vmsumubm", }, 1829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsumuhm , " vmsumuhm", }, 1830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsumshs , " vmsumshs", }, 1831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsumuhs , " vmsumuhs", }, 1832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsummbm , " vmsummbm", }, 1833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsumshm , " vmsumshm", }, 1834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 1837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 1839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vperm (void) 1840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vperm 17, 14, 15, 16"); 1842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsel (void) 1845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsel 17, 14, 15, 16"); 1847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_three[] = { 1850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vperm , " vperm", }, 1851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsel , " vsel", }, 1852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 1855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 1857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddubm (void) 1858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddubm 17, 14, 15"); 1860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduhm (void) 1863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vadduhm 17, 14, 15"); 1865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduwm (void) 1868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vadduwm 17, 14, 15"); 1870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddubs (void) 1873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddubs 17, 14, 15"); 1875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduhs (void) 1878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vadduhs 17, 14, 15"); 1880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduws (void) 1883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vadduws 17, 14, 15"); 1885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddsbs (void) 1888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddsbs 17, 14, 15"); 1890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddshs (void) 1893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddshs 17, 14, 15"); 1895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddsws (void) 1898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddsws 17, 14, 15"); 1900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddcuw (void) 1903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddcuw 17, 14, 15"); 1905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsububm (void) 1908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsububm 17, 14, 15"); 1910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuhm (void) 1913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubuhm 17, 14, 15"); 1915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuwm (void) 1918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubuwm 17, 14, 15"); 1920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsububs (void) 1923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsububs 17, 14, 15"); 1925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuhs (void) 1928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubuhs 17, 14, 15"); 1930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuws (void) 1933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubuws 17, 14, 15"); 1935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubsbs (void) 1938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubsbs 17, 14, 15"); 1940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubshs (void) 1943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubshs 17, 14, 15"); 1945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubsws (void) 1948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubsws 17, 14, 15"); 1950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubcuw (void) 1953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubcuw 17, 14, 15"); 1955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuloub (void) 1958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmuloub 17, 14, 15"); 1960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulouh (void) 1963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmulouh 17, 14, 15"); 1965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulosb (void) 1968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmulosb 17, 14, 15"); 1970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulosh (void) 1973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmulosh 17, 14, 15"); 1975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuleub (void) 1978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmuleub 17, 14, 15"); 1980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuleuh (void) 1983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmuleuh 17, 14, 15"); 1985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulesb (void) 1988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmulesb 17, 14, 15"); 1990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulesh (void) 1993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmulesh 17, 14, 15"); 1995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsumsws (void) 1998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsumsws 17, 14, 15"); 2000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum2sws (void) 2003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsum2sws 17, 14, 15"); 2005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4ubs (void) 2008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsum4ubs 17, 14, 15"); 2010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4sbs (void) 2013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsum4sbs 17, 14, 15"); 2015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4shs (void) 2018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsum4shs 17, 14, 15"); 2020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgub (void) 2023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavgub 17, 14, 15"); 2025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavguh (void) 2028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavguh 17, 14, 15"); 2030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavguw (void) 2033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavguw 17, 14, 15"); 2035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsb (void) 2038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavgsb 17, 14, 15"); 2040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsh (void) 2043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavgsh 17, 14, 15"); 2045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsw (void) 2048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavgsw 17, 14, 15"); 2050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxub (void) 2053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxub 17, 14, 15"); 2055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxuh (void) 2058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxuh 17, 14, 15"); 2060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxuw (void) 2063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxuw 17, 14, 15"); 2065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsb (void) 2068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxsb 17, 14, 15"); 2070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsh (void) 2073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxsh 17, 14, 15"); 2075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsw (void) 2078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxsw 17, 14, 15"); 2080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminub (void) 2083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminub 17, 14, 15"); 2085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminuh (void) 2088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminuh 17, 14, 15"); 2090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminuw (void) 2093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminuw 17, 14, 15"); 2095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsb (void) 2098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminsb 17, 14, 15"); 2100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsh (void) 2103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminsh 17, 14, 15"); 2105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsw (void) 2108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminsw 17, 14, 15"); 2110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_aa_ops_two[] = { 2113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddubm , " vaddubm", }, 2114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vadduhm , " vadduhm", }, 2115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vadduwm , " vadduwm", }, 2116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddubs , " vaddubs", }, 2117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vadduhs , " vadduhs", }, 2118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vadduws , " vadduws", }, 2119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddsbs , " vaddsbs", }, 2120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddshs , " vaddshs", }, 2121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddsws , " vaddsws", }, 2122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddcuw , " vaddcuw", }, 2123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsububm , " vsububm", }, 2124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubuhm , " vsubuhm", }, 2125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubuwm , " vsubuwm", }, 2126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsububs , " vsububs", }, 2127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubuhs , " vsubuhs", }, 2128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubuws , " vsubuws", }, 2129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubsbs , " vsubsbs", }, 2130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubshs , " vsubshs", }, 2131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubsws , " vsubsws", }, 2132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubcuw , " vsubcuw", }, 2133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmuloub , " vmuloub", }, 2134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmulouh , " vmulouh", }, 2135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmulosb , " vmulosb", }, 2136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmulosh , " vmulosh", }, 2137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmuleub , " vmuleub", }, 2138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmuleuh , " vmuleuh", }, 2139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmulesb , " vmulesb", }, 2140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmulesh , " vmulesh", }, 2141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsumsws , " vsumsws", }, 2142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsum2sws , " vsum2sws", }, 2143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsum4ubs , " vsum4ubs", }, 2144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsum4sbs , " vsum4sbs", }, 2145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsum4shs , " vsum4shs", }, 2146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavgub , " vavgub", }, 2147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavguh , " vavguh", }, 2148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavguw , " vavguw", }, 2149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavgsb , " vavgsb", }, 2150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavgsh , " vavgsh", }, 2151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavgsw , " vavgsw", }, 2152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxub , " vmaxub", }, 2153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxuh , " vmaxuh", }, 2154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxuw , " vmaxuw", }, 2155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxsb , " vmaxsb", }, 2156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxsh , " vmaxsh", }, 2157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxsw , " vmaxsw", }, 2158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminub , " vminub", }, 2159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminuh , " vminuh", }, 2160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminuw , " vminuw", }, 2161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminsb , " vminsb", }, 2162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminsh , " vminsh", }, 2163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminsw , " vminsw", }, 2164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vand (void) 2170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vand 17, 14, 15"); 2172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vor (void) 2175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 17, 14, 15"); 2177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vxor (void) 2180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vxor 17, 14, 15"); 2182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vandc (void) 2185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vandc 17, 14, 15"); 2187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vnor (void) 2190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vnor 17, 14, 15"); 2192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlb (void) 2195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrlb 17, 14, 15"); 2197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlh (void) 2200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrlh 17, 14, 15"); 2202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlw (void) 2205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrlw 17, 14, 15"); 2207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslb (void) 2210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vslb 17, 14, 15"); 2212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslh (void) 2215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vslh 17, 14, 15"); 2217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslw (void) 2220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vslw 17, 14, 15"); 2222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrb (void) 2225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsrb 17, 14, 15"); 2227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrh (void) 2230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsrh 17, 14, 15"); 2232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrw (void) 2235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsrw 17, 14, 15"); 2237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrab (void) 2240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsrab 17, 14, 15"); 2242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrah (void) 2245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsrah 17, 14, 15"); 2247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsraw (void) 2250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsraw 17, 14, 15"); 2252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuhum (void) 2255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkuhum 17, 14, 15"); 2257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuwum (void) 2260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkuwum 17, 14, 15"); 2262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuhus (void) 2265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkuhus 17, 14, 15"); 2267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuwus (void) 2270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkuwus 17, 14, 15"); 2272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkshus (void) 2275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkshus 17, 14, 15"); 2277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkswus (void) 2280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkswus 17, 14, 15"); 2282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkshss (void) 2285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkshss 17, 14, 15"); 2287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkswss (void) 2290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkswss 17, 14, 15"); 2292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkpx (void) 2295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkpx 17, 14, 15"); 2297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghb (void) 2300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrghb 17, 14, 15"); 2302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghh (void) 2305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrghh 17, 14, 15"); 2307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghw (void) 2310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrghw 17, 14, 15"); 2312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglb (void) 2315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrglb 17, 14, 15"); 2317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglh (void) 2320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrglh 17, 14, 15"); 2322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglw (void) 2325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrglw 17, 14, 15"); 2327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslo (void) 2330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vslo 17, 14, 15"); 2332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsro (void) 2335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsro 17, 14, 15"); 2337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_two[] = { 2340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vand , " vand", }, 2341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vor , " vor", }, 2342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vxor , " vxor", }, 2343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vandc , " vandc", }, 2344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vnor , " vnor", }, 2345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vrlb , " vrlb", }, 2346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vrlh , " vrlh", }, 2347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vrlw , " vrlw", }, 2348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vslb , " vslb", }, 2349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vslh , " vslh", }, 2350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vslw , " vslw", }, 2351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsrb , " vsrb", }, 2352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsrh , " vsrh", }, 2353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsrw , " vsrw", }, 2354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsrab , " vsrab", }, 2355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsrah , " vsrah", }, 2356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsraw , " vsraw", }, 2357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkuhum , " vpkuhum", }, 2358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkuwum , " vpkuwum", }, 2359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkuhus , " vpkuhus", }, 2360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkuwus , " vpkuwus", }, 2361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkshus , " vpkshus", }, 2362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkswus , " vpkswus", }, 2363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkshss , " vpkshss", }, 2364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkswss , " vpkswss", }, 2365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkpx , " vpkpx", }, 2366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrghb , " vmrghb", }, 2367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrghh , " vmrghh", }, 2368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrghw , " vmrghw", }, 2369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrglb , " vmrglb", }, 2370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrglh , " vmrglh", }, 2371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrglw , " vmrglw", }, 2372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vslo , " vslo", }, 2373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsro , " vsro", }, 2374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhsb (void) 2380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupkhsb 17, 14"); 2382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhsh (void) 2385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupkhsh 17, 14"); 2387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhpx (void) 2390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupkhpx 17, 14"); 2392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklsb (void) 2395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupklsb 17, 14"); 2397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklsh (void) 2400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupklsh 17, 14"); 2402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklpx (void) 2405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupklpx 17, 14"); 2407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_one[] = { 2410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupkhsb , " vupkhsb", }, 2411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupkhsh , " vupkhsh", }, 2412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupkhpx , " vupkhpx", }, 2413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupklsb , " vupklsb", }, 2414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupklsh , " vupklsh", }, 2415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupklpx , " vupklpx", }, 2416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtub (void) 2422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtub 17, 14, 15"); 2424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuh (void) 2427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtuh 17, 14, 15"); 2429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuw (void) 2432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtuw 17, 14, 15"); 2434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsb (void) 2437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsb 17, 14, 15"); 2439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsh (void) 2442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsh 17, 14, 15"); 2444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsw (void) 2447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsw 17, 14, 15"); 2449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequb (void) 2452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequb 17, 14, 15"); 2454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequh (void) 2457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequh 17, 14, 15"); 2459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequw (void) 2462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequw 17, 14, 15"); 2464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ac_ops_two[] = { 2467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtub , " vcmpgtub", }, 2468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtuh , " vcmpgtuh", }, 2469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtuw , " vcmpgtuw", }, 2470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsb , " vcmpgtsb", }, 2471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsh , " vcmpgtsh", }, 2472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsw , " vcmpgtsw", }, 2473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequb , " vcmpequb", }, 2474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequh , " vcmpequh", }, 2475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequw , " vcmpequw", }, 2476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtub_ (void) 2482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtub. 17, 14, 15"); 2484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuh_ (void) 2487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtuh. 17, 14, 15"); 2489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuw_ (void) 2492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtuw. 17, 14, 15"); 2494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsb_ (void) 2497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsb. 17, 14, 15"); 2499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsh_ (void) 2502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsh. 17, 14, 15"); 2504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsw_ (void) 2507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsw. 17, 14, 15"); 2509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequb_ (void) 2512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequb. 17, 14, 15"); 2514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequh_ (void) 2517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequh. 17, 14, 15"); 2519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequw_ (void) 2522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequw. 17, 14, 15"); 2524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_acr_ops_two[] = { 2527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtub_ , " vcmpgtub.", }, 2528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtuh_ , " vcmpgtuh.", }, 2529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtuw_ , " vcmpgtuw.", }, 2530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsb_ , " vcmpgtsb.", }, 2531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsh_ , " vcmpgtsh.", }, 2532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsw_ , " vcmpgtsw.", }, 2533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequb_ , " vcmpequb.", }, 2534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequh_ , " vcmpequh.", }, 2535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequw_ , " vcmpequw.", }, 2536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsl (void) 2542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsl 17, 14, 15"); 2544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsr (void) 2547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsr 17, 14, 15"); 2549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 255157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltb (void); 25528a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltb", "vspltb 17, 14, 0"); 255357778621b9d85c82fcb5185ba146add1715c5432sewardj 255457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vsplth (void); 25558a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vsplth", "vsplth 17, 14, 0"); 255657778621b9d85c82fcb5185ba146add1715c5432sewardj 255757778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltw (void); 25588a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltw", "vspltw 17, 14, 0"); 255957778621b9d85c82fcb5185ba146add1715c5432sewardj 256057778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltisb (void); 25618a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltisb", "vspltisb 17, 0"); 256257778621b9d85c82fcb5185ba146add1715c5432sewardj 256357778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltish (void); 25648a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltish", "vspltish 17, 0"); 256557778621b9d85c82fcb5185ba146add1715c5432sewardj 256657778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vspltisw (void); 25678a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vspltisw", "vspltisw 17, 0"); 256857778621b9d85c82fcb5185ba146add1715c5432sewardj 256957778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vsldoi (void); 25708a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vsldoi", "vsldoi 17, 14, 15, 0"); 2571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 257205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvsl (void) 257305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 257405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvsl 17, 14, 15"); 257505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 257605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 257705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvsr (void) 257805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 257905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvsr 17, 14, 15"); 258005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 258105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 2582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_av_int_ops_spe[] = { 2583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsl , " vsl", }, 2584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsr , " vsr", }, 2585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vspltb , " vspltb", }, 2586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsplth , " vsplth", }, 2587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vspltw , " vspltw", }, 2588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vspltisb , " vspltisb", }, 2589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vspltish , " vspltish", }, 2590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vspltisw , " vspltisw", }, 2591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsldoi , " vsldoi", }, 259205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvsl , " lvsl", }, 259305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvsr , " lvsr", }, 2594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 259905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvebx (void) 260005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 260105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvebx 17,14,15"); 260205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 260305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 260405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvehx (void) 260505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 260605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvehx 17,14,15"); 260705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 260805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 260905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvewx (void) 261005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 261105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvewx 17,14,15"); 261205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 261305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 261405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvx (void) 261505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 261605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvx 17,14,15"); 261705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 261805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 261905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic test_t tests_ald_ops_two[] = { 262005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvebx , " lvebx", }, 262105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvehx , " lvehx", }, 262205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvewx , " lvewx", }, 262305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvx , " lvx", }, 262405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { NULL, NULL, }, 262505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}; 262605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */ 262705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 262805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC) 262905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvebx (void) 263005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 263105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("stvebx 14,15,16"); 263205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 263305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 263405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvehx (void) 263505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 263605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("stvehx 14,15,16"); 263705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 263805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 263905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvewx (void) 264005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 264105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("stvewx 14,15,16"); 264205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 264305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 264405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvx (void) 264505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 264605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("stvx 14,15,16"); 264705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 264805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 264905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic test_t tests_ast_ops_three[] = { 265005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_stvebx , " stvebx", }, 265105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_stvehx , " stvehx", }, 265205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_stvewx , " stvewx", }, 265305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_stvx , " stvx", }, 265405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { NULL, NULL, }, 265505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}; 265605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */ 265705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 265805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC) 265905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0 2660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaddfp (void) 2661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaddfp 17, 14, 15, 16"); 2663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vnmsubfp (void) 2666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vnmsubfp 17, 14, 15, 16"); 2668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 266905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif 2670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_three[] = { 267205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion// { &test_vmaddfp , " vmaddfp", }, // TODO: Not yet supported 267305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion// { &test_vnmsubfp , " vnmsubfp", }, // TODO: Not yet supported 2674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddfp (void) 2680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddfp 17, 14, 15"); 2682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubfp (void) 2685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubfp 17, 14, 15"); 2687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxfp (void) 2690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxfp 17, 14, 15"); 2692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminfp (void) 2695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminfp 17, 14, 15"); 2697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_two[] = { 2700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddfp , " vaddfp", }, 2701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubfp , " vsubfp", }, 2702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxfp , " vmaxfp", }, 2703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminfp , " vminfp", }, 2704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfin (void) 2710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrfin 17, 14"); 2712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfiz (void) 2715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrfiz 17, 14"); 2717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfip (void) 2720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrfip 17, 14"); 2722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfim (void) 2725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrfim 17, 14"); 2727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrefp (void) 2730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrefp 17, 14"); 2732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrsqrtefp (void) 2735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrsqrtefp 17, 14"); 2737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 273905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0 // TODO: Not yet supported 2740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vlogefp (void) 2741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vlogefp 17, 14"); 2743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vexptefp (void) 2746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vexptefp 17, 14"); 2748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 274905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif 2750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_one[] = { 27528f5fc19da719edcd8dfca920837bde7ce1d3accacerion { &test_vrfin , " vrfin", }, 27538f5fc19da719edcd8dfca920837bde7ce1d3accacerion { &test_vrfiz , " vrfiz", }, 27548f5fc19da719edcd8dfca920837bde7ce1d3accacerion { &test_vrfip , " vrfip", }, 27558f5fc19da719edcd8dfca920837bde7ce1d3accacerion { &test_vrfim , " vrfim", }, 2756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vrefp , " vrefp", }, 2757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vrsqrtefp , " vrsqrtefp", }, 2758b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion // { &test_vlogefp , " vlogefp", }, // TODO: Not yet supported 2759b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion // { &test_vexptefp , " vexptefp", }, // TODO: Not yet supported 2760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtfp (void) 2766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtfp 17, 14, 15"); 2768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpeqfp (void) 2771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpeqfp 17, 14, 15"); 2773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgefp (void) 2776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgefp 17, 14, 15"); 2778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpbfp (void) 2781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpbfp 17, 14, 15"); 2783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afc_ops_two[] = { 2786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtfp , " vcmpgtfp", }, 2787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpeqfp , " vcmpeqfp", }, 2788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgefp , " vcmpgefp", }, 2789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpbfp , " vcmpbfp", }, 2790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtfp_ (void) 2796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtfp. 17, 14, 15"); 2798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpeqfp_ (void) 2801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpeqfp. 17, 14, 15"); 2803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgefp_ (void) 2806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgefp. 17, 14, 15"); 2808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpbfp_ (void) 2811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpbfp. 17, 14, 15"); 2813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afcr_ops_two[] = { 2816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtfp_ , " vcmpgtfp.", }, 2817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpeqfp_ , " vcmpeqfp.", }, 2818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgefp_ , " vcmpgefp.", }, 2819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpbfp_ , " vcmpbfp.", }, 2820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 28248f5fc19da719edcd8dfca920837bde7ce1d3accacerion#if defined (HAS_ALTIVEC) 282557778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vcfux (void); 28268a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vcfux", "vcfux 17, 14, 0"); 282757778621b9d85c82fcb5185ba146add1715c5432sewardj 282857778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vcfsx (void); 28298a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vcfsx", "vcfsx 17, 14, 0"); 283057778621b9d85c82fcb5185ba146add1715c5432sewardj 283157778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vctuxs (void); 28328a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vctuxs", "vctuxs 17, 14, 0"); 283357778621b9d85c82fcb5185ba146add1715c5432sewardj 283457778621b9d85c82fcb5185ba146add1715c5432sewardjextern void test_vctsxs (void); 28358a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerionASSEMBLY_FUNC("test_vctsxs", "vctsxs 17, 14, 0"); 28368f5fc19da719edcd8dfca920837bde7ce1d3accacerion 28378f5fc19da719edcd8dfca920837bde7ce1d3accacerionstatic test_t tests_av_float_ops_spe[] = { 28388f5fc19da719edcd8dfca920837bde7ce1d3accacerion { &test_vcfux , " vcfux", }, 28398f5fc19da719edcd8dfca920837bde7ce1d3accacerion { &test_vcfsx , " vcfsx", }, 28408f5fc19da719edcd8dfca920837bde7ce1d3accacerion { &test_vctuxs , " vctuxs", }, 28418f5fc19da719edcd8dfca920837bde7ce1d3accacerion { &test_vctsxs , " vctsxs", }, 28428f5fc19da719edcd8dfca920837bde7ce1d3accacerion { NULL, NULL, }, 28438f5fc19da719edcd8dfca920837bde7ce1d3accacerion}; 28448f5fc19da719edcd8dfca920837bde7ce1d3accacerion#endif /* defined (HAS_ALTIVEC) */ 28458f5fc19da719edcd8dfca920837bde7ce1d3accacerion 2846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 2847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchw (void) 2848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchw 17, 14, 15"); 2850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwo (void) 2853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwo 17, 14, 15"); 2855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchws (void) 2858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchws 17, 14, 15"); 2860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwso (void) 2863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwso 17, 14, 15"); 2865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsu (void) 2868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwsu 17, 14, 15"); 2870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsuo (void) 2873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwsuo 17, 14, 15"); 2875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwu (void) 2878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwu 17, 14, 15"); 2880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwuo (void) 2883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwuo 17, 14, 15"); 2885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhw (void) 2888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhw 17, 14, 15"); 2890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwo (void) 2893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwo 17, 14, 15"); 2895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhws (void) 2898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhws 17, 14, 15"); 2900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwso (void) 2903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwso 17, 14, 15"); 2905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsu (void) 2908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwsu 17, 14, 15"); 2910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsuo (void) 2913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwsuo 17, 14, 15"); 2915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwu (void) 2918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwu 17, 14, 15"); 2920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwuo (void) 2923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwuo 17, 14, 15"); 2925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhw (void) 2928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhw 17, 14, 15"); 2930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwo (void) 2933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwo 17, 14, 15"); 2935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhws (void) 2938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhws 17, 14, 15"); 2940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwso (void) 2943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwso 17, 14, 15"); 2945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsu (void) 2948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwsu 17, 14, 15"); 2950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsuo (void) 2953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwsuo 17, 14, 15"); 2955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwu (void) 2958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwu 17, 14, 15"); 2960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwuo (void) 2963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwuo 17, 14, 15"); 2965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchw (void) 2968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulchw 17, 14, 15"); 2970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchwu (void) 2973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulchwu 17, 14, 15"); 2975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhw (void) 2978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhhw 17, 14, 15"); 2980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhwu (void) 2983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhhwu 17, 14, 15"); 2985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhw (void) 2988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullhw 17, 14, 15"); 2990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhwu (void) 2993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullhwu 17, 14, 15"); 2995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchw (void) 2998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchw 17, 14, 15"); 3000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwo (void) 3003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchwo 17, 14, 15"); 3005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchws (void) 3008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchws 17, 14, 15"); 3010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwso (void) 3013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchwso 17, 14, 15"); 3015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhw (void) 3018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhw 17, 14, 15"); 3020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwo (void) 3023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhwo 17, 14, 15"); 3025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhws (void) 3028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhws 17, 14, 15"); 3030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwso (void) 3033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhwso 17, 14, 15"); 3035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhw (void) 3038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhw 17, 14, 15"); 3040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwo (void) 3043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhwo 17, 14, 15"); 3045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhws (void) 3048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhws 17, 14, 15"); 3050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwso (void) 3053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhwso 17, 14, 15"); 3055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_p4m_ops_two[] = { 3058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchw , " macchw", }, 3059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwo , " macchwo", }, 3060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchws , " macchws", }, 3061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwso , " macchwso", }, 3062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwsu , " macchwsu", }, 3063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwsuo , " macchwsuo", }, 3064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwu , " macchwu", }, 3065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwuo , " macchwuo", }, 3066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhw , " machhw", }, 3067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwo , " machhwo", }, 3068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhws , " machhws", }, 3069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwso , " machhwso", }, 3070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwsu , " machhwsu", }, 3071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwsuo , " machhwsuo", }, 3072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwu , " machhwu", }, 3073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwuo , " machhwuo", }, 3074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhw , " maclhw", }, 3075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwo , " maclhwo", }, 3076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhws , " maclhws", }, 3077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwso , " maclhwso", }, 3078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwsu , " maclhwsu", }, 3079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwsuo , " maclhwsuo", }, 3080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwu , " maclhwu", }, 3081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwuo , " maclhwuo", }, 3082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulchw , " mulchw", }, 3083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulchwu , " mulchwu", }, 3084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhhw , " mulhhw", }, 3085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhhwu , " mulhhwu", }, 3086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullhw , " mullhw", }, 3087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullhwu , " mullhwu", }, 3088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchw , " nmacchw", }, 3089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchwo , " nmacchwo", }, 3090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchws , " nmacchws", }, 3091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchwso , " nmacchwso", }, 3092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhw , " nmachhw", }, 3093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhwo , " nmachhwo", }, 3094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhws , " nmachhws", }, 3095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhwso , " nmachhwso", }, 3096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhw , " nmaclhw", }, 3097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhwo , " nmaclhwo", }, 3098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhws , " nmaclhws", }, 3099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhwso , " nmaclhwso", }, 3100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 3101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 3102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 3103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 3105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchw_ (void) 3106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchw. 17, 14, 15"); 3108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwo_ (void) 3111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwo. 17, 14, 15"); 3113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchws_ (void) 3116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchws. 17, 14, 15"); 3118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwso_ (void) 3121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwso. 17, 14, 15"); 3123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsu_ (void) 3126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwsu. 17, 14, 15"); 3128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsuo_ (void) 3131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwsuo. 17, 14, 15"); 3133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwu_ (void) 3136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwu. 17, 14, 15"); 3138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwuo_ (void) 3141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwuo. 17, 14, 15"); 3143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhw_ (void) 3146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhw. 17, 14, 15"); 3148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwo_ (void) 3151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwo. 17, 14, 15"); 3153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhws_ (void) 3156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhws. 17, 14, 15"); 3158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwso_ (void) 3161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwso. 17, 14, 15"); 3163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsu_ (void) 3166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwsu. 17, 14, 15"); 3168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsuo_ (void) 3171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwsuo. 17, 14, 15"); 3173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwu_ (void) 3176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwu. 17, 14, 15"); 3178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwuo_ (void) 3181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwuo. 17, 14, 15"); 3183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhw_ (void) 3186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhw. 17, 14, 15"); 3188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwo_ (void) 3191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwo. 17, 14, 15"); 3193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhws_ (void) 3196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhws. 17, 14, 15"); 3198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwso_ (void) 3201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwso. 17, 14, 15"); 3203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsu_ (void) 3206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwsu. 17, 14, 15"); 3208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsuo_ (void) 3211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwsuo. 17, 14, 15"); 3213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwu_ (void) 3216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwu. 17, 14, 15"); 3218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwuo_ (void) 3221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwuo. 17, 14, 15"); 3223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchw_ (void) 3226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulchw. 17, 14, 15"); 3228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchwu_ (void) 3231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulchwu. 17, 14, 15"); 3233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhw_ (void) 3236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhhw. 17, 14, 15"); 3238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhwu_ (void) 3241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhhwu. 17, 14, 15"); 3243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhw_ (void) 3246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullhw. 17, 14, 15"); 3248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhwu_ (void) 3251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullhwu. 17, 14, 15"); 3253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchw_ (void) 3256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchw. 17, 14, 15"); 3258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwo_ (void) 3261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchwo. 17, 14, 15"); 3263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchws_ (void) 3266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchws. 17, 14, 15"); 3268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwso_ (void) 3271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchwso. 17, 14, 15"); 3273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhw_ (void) 3276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhw. 17, 14, 15"); 3278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwo_ (void) 3281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhwo. 17, 14, 15"); 3283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhws_ (void) 3286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhws. 17, 14, 15"); 3288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwso_ (void) 3291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhwso. 17, 14, 15"); 3293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhw_ (void) 3296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhw. 17, 14, 15"); 3298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwo_ (void) 3301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhwo. 17, 14, 15"); 3303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhws_ (void) 3306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhws. 17, 14, 15"); 3308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwso_ (void) 3311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhwso. 17, 14, 15"); 3313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_p4mc_ops_two[] = { 3316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchw_ , " macchw.", }, 3317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwo_ , " macchwo.", }, 3318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchws_ , " macchws.", }, 3319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwso_ , " macchwso.", }, 3320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwsu_ , " macchwsu.", }, 3321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwsuo_ , " macchwsuo.", }, 3322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwu_ , " macchwu.", }, 3323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwuo_ , " macchwuo.", }, 3324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhw_ , " machhw.", }, 3325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwo_ , " machhwo.", }, 3326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhws_ , " machhws.", }, 3327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwso_ , " machhwso.", }, 3328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwsu_ , " machhwsu.", }, 3329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwsuo_ , " machhwsuo.", }, 3330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwu_ , " machhwu.", }, 3331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwuo_ , " machhwuo.", }, 3332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhw_ , " maclhw.", }, 3333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwo_ , " maclhwo.", }, 3334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhws_ , " maclhws.", }, 3335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwso_ , " maclhwso.", }, 3336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwsu_ , " maclhwsu.", }, 3337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwsuo_ , " maclhwsuo.", }, 3338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwu_ , " maclhwu.", }, 3339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwuo_ , " maclhwuo.", }, 3340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulchw_ , " mulchw.", }, 3341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulchwu_ , " mulchwu.", }, 3342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhhw_ , " mulhhw.", }, 3343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhhwu_ , " mulhhwu.", }, 3344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullhw_ , " mullhw.", }, 3345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullhwu_ , " mullhwu.", }, 3346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchw_ , " nmacchw.", }, 3347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchwo_ , " nmacchwo.", }, 3348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchws_ , " nmacchws.", }, 3349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchwso_ , " nmacchwso.", }, 3350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhw_ , " nmachhw.", }, 3351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhwo_ , " nmachhwo.", }, 3352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhws_ , " nmachhws.", }, 3353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhwso_ , " nmachhwso.", }, 3354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhw_ , " nmaclhw.", }, 3355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhwo_ , " nmaclhwo.", }, 3356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhws_ , " nmaclhws.", }, 3357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhwso_ , " nmaclhwso.", }, 3358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 3359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 3360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 3361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_table_t all_tests[] = { 3363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ia_ops_two , 3365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with two args", 3366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010102, 3367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iar_ops_two , 3370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with two args with flags update", 3371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010102, 3372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iac_ops_two , 3375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with two args and carry", 3376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x02010102, 3377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iacr_ops_two , 3380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with two args and carry with flags update", 3381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x03010102, 3382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_il_ops_two , 3385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns with two args", 3386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010202, 3387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ilr_ops_two , 3390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns with two args with flags update", 3391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010202, 3392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_icr_ops_two , 3395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer compare insns (two args)", 3396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010304, 3397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_icr_ops_two_i16 , 3400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer compare with immediate insns (two args)", 3401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010305, 3402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ia_ops_two_i16 , 3405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns\n with one register + one 16 bits immediate args", 3406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010106, 3407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iar_ops_two_i16 , 3410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns\n with one register + one 16 bits immediate args with flags update", 3411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010106, 3412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_il_ops_two_i16 , 3415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns\n with one register + one 16 bits immediate args", 3416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010206, 3417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ilr_ops_two_i16 , 3420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns\n with one register + one 16 bits immediate args with flags update", 3421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010206, 3422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_crl_ops_two , 3425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC condition register logical insns - two operands", 3426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010202, 3427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iac_ops_one , 3430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with one arg and carry", 3431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x02010101, 3432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iacr_ops_one , 3435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with one arg and carry with flags update", 3436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x03010101, 3437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_il_ops_one , 3440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns with one arg", 3441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010201, 3442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ilr_ops_one , 3445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns with one arg with flags update", 3446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010201, 3447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_il_ops_spe , 3450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC logical insns with special forms", 3451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010207, 3452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ilr_ops_spe , 3455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC logical insns with special forms with flags update", 3456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010207, 3457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ild_ops_two_i16 , 3460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer load insns\n with one register + one 16 bits immediate args with flags update", 3461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010508, 3462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ild_ops_two , 3465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer load insns with two register args", 3466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010509, 3467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ist_ops_three_i16, 3470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer store insns\n with one register + one 16 bits immediate args with flags update", 3471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x0001050a, 3472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ist_ops_three , 3475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer store insns with three register args", 3476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x0001050b, 3477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_fa_ops_three , 3481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns with three args", 3482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00020103, 3483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3487c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tests_far_ops_three , 3488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns\n with three args with flags update", 3489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01020103, 3490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_fa_ops_two , 3495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns with two args", 3496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00020102, 3497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_far_ops_two , 3502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns\n with two args with flags update", 3503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01020102, 3504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_fcr_ops_two , 3509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point compare insns (two args)", 3510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01020304, 3511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_fa_ops_one , 3516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns with one arg", 3517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00020101, 3518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_far_ops_one , 3523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns\n with one arg with flags update", 3524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01020101, 3525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_fl_ops_spe , 3530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point status register manipulation insns", 3531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00020207, 3532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_flr_ops_spe , 3537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point status register manipulation insns\n with flags update", 3538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01020207, 3539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3541c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT) 3542c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { 3543c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tests_fld_ops_two_i16 , 3544c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion "PPC float load insns\n with one register + one 16 bits immediate args with flags update", 3545c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 0x00020508, 3546c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion }, 3547c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */ 3548c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT) 3549c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { 3550c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tests_fld_ops_two , 3551c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion "PPC float load insns with two register args", 3552c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 0x00020509, 3553c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion }, 3554c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */ 3555c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT) 3556c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { 3557c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tests_fst_ops_three_i16, 3558c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion "PPC float store insns\n with one register + one 16 bits immediate args with flags update", 3559c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 0x0002050a, 3560c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion }, 3561c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */ 3562c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#if !defined (NO_FLOAT) 3563c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion { 3564c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tests_fst_ops_three , 3565c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion "PPC float store insns with three register args", 3566c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 0x0002050b, 3567c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion }, 3568c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif /* !defined (NO_FLOAT) */ 3569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_aa_ops_three , 3572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC altivec integer arith insns with three args", 3573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040103, 3574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_al_ops_three , 3579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC altivec integer logical insns with three args", 3580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040203, 3581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_aa_ops_two , 3586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC altivec integer arith insns with two args", 3587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040102, 3588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_al_ops_two , 3593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC altivec integer logical insns with two args", 3594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040202, 3595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_al_ops_one , 3600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC altivec integer logical insns with one arg", 3601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040201, 3602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ac_ops_two , 3607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec integer compare insns", 3608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040302, 3609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_acr_ops_two , 3614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec integer compare insns with flags update", 3615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01040302, 3616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_av_int_ops_spe , 3621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec integer special insns", 3622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040207, 3623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 362705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion tests_ald_ops_two , 362805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion "Altivec load insns with two register args", 362905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 0x00040509, 363005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion }, 363105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */ 363205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC) 363305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { 363405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion tests_ast_ops_three , 363505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion "Altivec store insns with three register args", 363605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 0x0004050b, 363705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion }, 363805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */ 363905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC) 364005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { 3641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_afa_ops_three , 3642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec floating point arith insns with three args", 3643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00050103, 3644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_afa_ops_two , 3649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec floating point arith insns with two args", 3650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00050102, 3651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_afa_ops_one , 3656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec floating point arith insns with one arg", 3657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00050101, 3658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_afc_ops_two , 3663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec floating point compare insns", 3664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00050302, 3665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_afcr_ops_two , 3670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec floating point compare insns with flags update", 3671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01050302, 3672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 36748f5fc19da719edcd8dfca920837bde7ce1d3accacerion#if defined (HAS_ALTIVEC) 36758f5fc19da719edcd8dfca920837bde7ce1d3accacerion { 36768f5fc19da719edcd8dfca920837bde7ce1d3accacerion tests_av_float_ops_spe, 36778f5fc19da719edcd8dfca920837bde7ce1d3accacerion "Altivec float special insns", 36788f5fc19da719edcd8dfca920837bde7ce1d3accacerion 0x00050207, 36798f5fc19da719edcd8dfca920837bde7ce1d3accacerion }, 36808f5fc19da719edcd8dfca920837bde7ce1d3accacerion#endif /* defined (HAS_ALTIVEC) */ 3681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 3682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_p4m_ops_two , 3684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC 405 mac insns with three args", 3685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00030102, 3686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 3688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 3689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_p4mc_ops_two , 3691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC 405 mac insns with three args with flags update", 3692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01030102, 3693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 3695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, 0x00000000, }, 3696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 3697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- END #include "ops-ppc.c" -------------- */ 3699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int verbose = 0; 3701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int arg_list_size = 0; 3702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic double *fargs; 3704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_fargs; 3705586fb038935723146cb6950b38911aeb9fc12765cerionstatic int nb_normal_fargs; 3706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic uint32_t *iargs; 3707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_iargs; 3708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic uint16_t *ii16; 3709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_ii16; 3710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic vector unsigned int* viargs; 3712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_viargs; 3713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic vector float* vfargs; 3714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_vfargs; 3715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#define TEST_VSCR_SAT 3717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 3718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void register_farg (void *farg, 37208a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion int s, uint16_t _exp, uint64_t mant) 3721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t tmp; 3723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 37248a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion tmp = ((uint64_t)s << 63) | ((uint64_t)_exp << 52) | mant; 3725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *(uint64_t *)farg = tmp; 3726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("%d %03x %013llx => %016llx %0e\n", 37278a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion s, _exp, mant, *(uint64_t *)farg, *(double *)farg); 3728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_fargs_table (void) 3731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3732c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Double precision: 3733c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * Sign goes from zero to one (1 bit) 3734c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * Exponent goes from 0 to ((1 << 12) - 1) (11 bits) 3735c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * Mantissa goes from 1 to ((1 << 52) - 1) (52 bits) 3736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * + special values: 3737c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * +0.0 : 0 0x000 0x0000000000000 => 0x0000000000000000 3738c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * -0.0 : 1 0x000 0x0000000000000 => 0x8000000000000000 3739c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * +infinity : 0 0x7FF 0x0000000000000 => 0x7FF0000000000000 3740c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * -infinity : 1 0x7FF 0x0000000000000 => 0xFFF0000000000000 3741c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * +QNaN : 0 0x7FF 0x7FFFFFFFFFFFF => 0x7FF7FFFFFFFFFFFF 3742c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * -QNaN : 1 0x7FF 0x7FFFFFFFFFFFF => 0xFFF7FFFFFFFFFFFF 3743c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * +SNaN : 0 0x7FF 0x8000000000000 => 0x7FF8000000000000 3744c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * -SNaN : 1 0x7FF 0x8000000000000 => 0xFFF8000000000000 3745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * (8 values) 3746c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 3747c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * Ref only: 3748c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * Single precision 3749c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * Sign: 1 bit 3750c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * Exponent: 8 bits 3751c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * Mantissa: 23 bits 3752c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * +0.0 : 0 0x00 0x000000 => 0x00000000 3753c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * -0.0 : 1 0x00 0x000000 => 0x80000000 3754c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * +infinity : 0 0xFF 0x000000 => 0x7F800000 3755c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * -infinity : 1 0xFF 0x000000 => 0xFF800000 3756c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * +QNaN : 0 0xFF 0x3FFFFF => 0x7FBFFFFF 3757c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * -QNaN : 1 0xFF 0x3FFFFF => 0xFFBFFFFF 3758c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * +SNaN : 0 0xFF 0x400000 => 0x7FC00000 3759c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion * -SNaN : 1 0xFF 0x400000 => 0xFFC00000 3760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 3761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t mant; 37628a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion uint16_t _exp, e0, e1; 3763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int s; 3764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i=0; 3765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3766586fb038935723146cb6950b38911aeb9fc12765cerion /* Note: VEX isn't so hot with denormals, so don't bother 37678a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion testing them: set _exp > 0 3768586fb038935723146cb6950b38911aeb9fc12765cerion */ 3769586fb038935723146cb6950b38911aeb9fc12765cerion 3770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if ( arg_list_size == 1 ) { // Large 3771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fargs = malloc(200 * sizeof(double)); 3772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (s=0; s<2; s++) { 3773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (e0=0; e0<2; e0++) { 3774586fb038935723146cb6950b38911aeb9fc12765cerion for (e1=0x001; ; e1 = ((e1 + 1) << 2) + 6) { 3775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (e1 >= 0x400) 3776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj e1 = 0x3fe; 37778a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = (e0 << 10) | e1; 3778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (mant = 0x0000000000001ULL; mant < (1ULL << 52); 3779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Add 'random' bits */ 3780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = ((mant + 0x4A6) << 13) + 0x359) { 37818a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_farg(&fargs[i++], s, _exp, mant); 3782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (e1 == 0x3fe) 3784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { // Default 3789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fargs = malloc(16 * sizeof(double)); 3790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (s=0; s<2; s++) { // x2 3791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// for (e0=0; e0<2; e0++) { 3792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (e1=0x001; ; e1 = ((e1 + 1) << 13) + 7) { // x2 3793586fb038935723146cb6950b38911aeb9fc12765cerion// for (e1=0x001; ; e1 = ((e1 + 1) << 5) + 7) { // x3 3794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (e1 >= 0x400) 3795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj e1 = 0x3fe; 37968a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion// _exp = (e0 << 10) | e1; 37978a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = e1; 3798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (mant = 0x0000000000001ULL; mant < (1ULL << 52); 3799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Add 'random' bits */ 3800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = ((mant + 0x4A6) << 29) + 0x359) { // x2 38018a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_farg(&fargs[i++], s, _exp, mant); 3802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (e1 == 0x3fe) 3804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// } 3807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3810586fb038935723146cb6950b38911aeb9fc12765cerion /* To iterate over non-special values only */ 3811586fb038935723146cb6950b38911aeb9fc12765cerion nb_normal_fargs = i; 3812586fb038935723146cb6950b38911aeb9fc12765cerion 3813586fb038935723146cb6950b38911aeb9fc12765cerion 3814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Special values */ 3815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +0.0 : 0 0x000 0x0000000000000 */ 3816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 38178a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0x000; 3818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x0000000000000ULL; 38198a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_farg(&fargs[i++], s, _exp, mant); 3820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -0.0 : 1 0x000 0x0000000000000 */ 3821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 38228a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0x000; 3823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x0000000000000ULL; 38248a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_farg(&fargs[i++], s, _exp, mant); 3825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +infinity : 0 0x7FF 0x0000000000000 */ 3826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 38278a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0x7FF; 3828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x0000000000000ULL; 38298a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_farg(&fargs[i++], s, _exp, mant); 3830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -infinity : 1 0x7FF 0x0000000000000 */ 3831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 38328a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0x7FF; 3833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x0000000000000ULL; 38348a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_farg(&fargs[i++], s, _exp, mant); 3835c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* +QNaN : 0 0x7FF 0x7FFFFFFFFFFFF */ 3836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 38378a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0x7FF; 3838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x7FFFFFFFFFFFFULL; 38398a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_farg(&fargs[i++], s, _exp, mant); 3840c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* -QNaN : 1 0x7FF 0x7FFFFFFFFFFFF */ 3841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 38428a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0x7FF; 3843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x7FFFFFFFFFFFFULL; 38448a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_farg(&fargs[i++], s, _exp, mant); 3845c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* +SNaN : 0 0x7FF 0x8000000000000 */ 3846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 38478a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0x7FF; 3848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x8000000000000ULL; 38498a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_farg(&fargs[i++], s, _exp, mant); 3850c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* -SNaN : 1 0x7FF 0x8000000000000 */ 3851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 38528a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0x7FF; 3853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x8000000000000ULL; 38548a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_farg(&fargs[i++], s, _exp, mant); 3855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("Registered %d fargs values\n", i); 3856c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 3857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nb_fargs = i; 3858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_iargs_table (void) 3861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t tmp; 3863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i=0; 3864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (arg_list_size == 1) { // Large 3866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs = malloc(400 * sizeof(uint32_t)); 3867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (tmp=0; ; tmp = tmp + 1 + (tmp >> 1)) { 3868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp >= 0x100000000ULL) 3869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = 0xFFFFFFFF; 38708a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion iargs[i++] = (uint32_t)tmp; 38718a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion AB_DPRINTF("val %08x\n", (uint32_t)tmp); 3872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp == 0xFFFFFFFF) 3873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { // Default 3876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs = malloc(10 * sizeof(uint32_t)); 3877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // for (tmp = 0; ; tmp = 71*tmp + 1 + (tmp>>1)) { // gives 8 3878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // for (tmp = 0; ; tmp = 100000*tmp + 1 + (tmp>>1)) { // gives 4 3879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (tmp=0; ; tmp = 999999*tmp + 999999) { // gives 3 3880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp >= 0x100000000ULL) 3881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = 0xFFFFFFFF; 38828a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion iargs[i++] = (uint32_t)tmp; 38838a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion AB_DPRINTF("val %08x\n", (uint32_t)tmp); 3884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp == 0xFFFFFFFF) 3885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("Registered %d iargs values\n", i); 3889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nb_iargs = i; 3890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_ii16_table (void) 3893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t tmp; 3895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i=0; 3896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (arg_list_size == 1) { // Large 3898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ii16 = malloc(200 * sizeof(uint32_t)); 3899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (tmp=0; ; tmp = tmp + 1 + (tmp >> 2)) { 3900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp >= 0x10000) 3901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = 0xFFFF; 3902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ii16[i++] = tmp; 3903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("val %08x\n", tmp); 3904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp == 0xFFFF) 3905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { // Default 3908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ii16 = malloc(10 * sizeof(uint32_t)); 3909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (tmp=0; ; tmp = 999*tmp + 999) { // gives 3 3910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp >= 0x10000) 3911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = 0xFFFF; 3912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ii16[i++] = tmp; 3913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("val %08x\n", tmp); 3914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp == 0xFFFF) 3915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("Registered %d ii16 values\n", i); 3919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nb_ii16 = i; 3920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_viargs_table (void) 3924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (ALTIVEC_ARGS_LARGE) 3926f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int i=2; 3927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj viargs = memalign(16, i * sizeof(vector unsigned int)); 3928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj viargs[0] = (vector unsigned int) { 0x01020304,0x05060708,0x090A0B0C,0x0E0D0E0F }; 39298a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion AB_DPRINTF_VEC32x4( viargs[0] ); 3930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj viargs[1] = (vector unsigned int) { 0xF1F2F3F4,0xF5F6F7F8,0xF9FAFBFC,0xFEFDFEFF }; 39318a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion AB_DPRINTF_VEC32x4( viargs[1] ); 3932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 3933f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int i,j; 3934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // build from iargs table (large/default already set) 3935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj viargs = malloc(nb_iargs * sizeof(vector unsigned int)); 3936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 3937f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion j = iargs[i]; 3938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj viargs[i] = (vector unsigned int){ j, j*2, j*3, j*4 }; 39398a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion AB_DPRINTF_VEC32x4( viargs[i] ); 3940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 3942f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion 3943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("Registered %d viargs values\n", i); 3944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nb_viargs = i; 3945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void register_vfarg (vector float* vfarg, 39488a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion int s, uint8_t _exp, uint32_t mant) 3949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t tmp; 395181aab3c751b11fcfa6629b449c92bd7e3f459567sewardj vector uint32_t* vfargI = (vector uint32_t*)vfarg; 395281aab3c751b11fcfa6629b449c92bd7e3f459567sewardj 39538a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion tmp = ((uint64_t)s << 31) | ((uint64_t)_exp << 23) | mant; 395481aab3c751b11fcfa6629b449c92bd7e3f459567sewardj *vfargI = (vector uint32_t){ tmp,tmp,tmp,tmp }; 3955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("%d %02x %06x => %08x %0e\n", 39568a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion s, _exp, mant, *((uint32_t*)&tmp), *(float*)&tmp); 3957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_vfargs_table (void) 3960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Sign goes from zero to one 3962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Exponent goes from 0 to ((1 << 9) - 1) 3963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Mantissa goes from 1 to ((1 << 24) - 1) 3964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * + special values: 39658f5fc19da719edcd8dfca920837bde7ce1d3accacerion * +0.0 : 0 0x00 0x000000 => 0x00000000 39668f5fc19da719edcd8dfca920837bde7ce1d3accacerion * -0.0 : 1 0x00 0x000000 => 0x80000000 39678f5fc19da719edcd8dfca920837bde7ce1d3accacerion * +infinity : 0 0xFF 0x000000 => 0x7F800000 39688f5fc19da719edcd8dfca920837bde7ce1d3accacerion * -infinity : 1 0xFF 0x000000 => 0xFF800000 39698f5fc19da719edcd8dfca920837bde7ce1d3accacerion * +SNaN : 0 0xFF 0x7FFFFF (non-zero) => 0x7FFFFFFF 39708f5fc19da719edcd8dfca920837bde7ce1d3accacerion * -SNaN : 1 0xFF 0x7FFFFF (non-zero) => 0xFFFFFFFF 39718f5fc19da719edcd8dfca920837bde7ce1d3accacerion * +QNaN : 0 0xFF 0x3FFFFF (non-zero) => 0x7FBFFFFF 39728f5fc19da719edcd8dfca920837bde7ce1d3accacerion * -QNaN : 1 0xFF 0x3FFFFF (non-zero) => 0xFFBFFFFF 3973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * (8 values) 3974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 3975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t mant; 39768a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion uint16_t _exp; 3977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int s; 3978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i=0; 3979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 398105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if !defined (ALTIVEC_ARGS_LARGE) 398205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion nb_vfargs = 12; 3983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vfargs = memalign(16, nb_vfargs * sizeof(vector float)); 3984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 398505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // 4 values: 398605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (s=0; s<2; s++) { 39878a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion for (_exp=0x5; ; _exp += 0x9D ) { 39888a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion if (_exp > 0xDF) 398905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion break; 399005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (mant = 0x3FFFFF; mant < 0x7FFFFF; 399105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion mant = /* random */ ((mant + 0x1A6) << 31) + 0x159) { 39928a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_vfarg(&vfargs[i++], s, (uint8_t)_exp, mant); 399305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 399405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 399505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 399605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#else 399705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion nb_vfargs = 50; 399805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion vfargs = memalign(16, nb_vfargs * sizeof(vector float)); 399905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 400005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (s=0; s<2; s++) { 40018a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion for (_exp=0x0; ; _exp += 0x3F ) { 40028a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion // for (_exp=0; ; _exp = ((_exp + 1) << 1) + 3) { 40038a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion if (_exp >= 0xFE) 40048a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0xFE; 400505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (mant = 0x0; mant < 0x7FFFFF; 400605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion mant = /* random */ ((mant + 0x4A6) << 5) + 0x359) { 40078a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_vfarg(&vfargs[i++], s, (uint8_t)_exp, mant); 400805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 40098a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion if (_exp >= 0xFE) 401005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion break; 401105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 401205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 401305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif 401405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 4015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Special values */ 4016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +0.0 : 0 0x00 0x000000 */ 4017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 40188a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0x00; 4019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x000000; 40208a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_vfarg(&vfargs[i++], s, _exp, mant); 4021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -0.0 : 1 0x00 0x000000 */ 4022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 40238a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0x00; 4024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x000000; 40258a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_vfarg(&vfargs[i++], s, _exp, mant); 4026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +infinity : 0 0xFF 0x000000 */ 4028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 40298a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0xFF; 4030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x000000; 40318a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_vfarg(&vfargs[i++], s, _exp, mant); 4032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -infinity : 1 0xFF 0x000000 */ 4033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 40348a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0xFF; 4035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x000000; 40368a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_vfarg(&vfargs[i++], s, _exp, mant); 4037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 40388a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion /* NaN: _exponent all 1s, non-zero fraction */ 4039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* SNaN is a NaN with the most significant fraction bit clear.*/ 40408f5fc19da719edcd8dfca920837bde7ce1d3accacerion /* +SNaN : 0 0xFF 0x7FFFFF */ 4041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 40428a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0xFF; 40438f5fc19da719edcd8dfca920837bde7ce1d3accacerion mant = 0x7FFFFF; 40448a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_vfarg(&vfargs[i++], s, _exp, mant); 40458f5fc19da719edcd8dfca920837bde7ce1d3accacerion /* -SNaN : 1 0xFF 0x7FFFFF */ 4046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 40478a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0xFF; 40488f5fc19da719edcd8dfca920837bde7ce1d3accacerion mant = 0x7FFFFF; 40498a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_vfarg(&vfargs[i++], s, _exp, mant); 4050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* QNaN is a NaN with the most significant fraction bit set */ 40528f5fc19da719edcd8dfca920837bde7ce1d3accacerion /* +QNaN : 0 0xFF 0x3F0000 */ 4053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 40548a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0xFF; 40558f5fc19da719edcd8dfca920837bde7ce1d3accacerion mant = 0x3FFFFF; 40568a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_vfarg(&vfargs[i++], s, _exp, mant); 40578f5fc19da719edcd8dfca920837bde7ce1d3accacerion /* -QNaN : 1 0xFF 0x3F0000 */ 4058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 40598a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion _exp = 0xFF; 40608f5fc19da719edcd8dfca920837bde7ce1d3accacerion mant = 0x3FFFFF; 40618a43f81f6e42d3407ae9649a5b5c9ff801abdbe0cerion register_vfarg(&vfargs[i++], s, _exp, mant); 4062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("Registered %d vfargs values\n", i); 4063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 406405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion assert(i <= nb_vfargs); 406505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion nb_vfargs = i; 4066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_iargs (void) 4071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 4073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i = 0; i < nb_iargs; i++) { 4074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("iarg %d: %08x %08x %08x\n", i, iargs[i], 4075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (unsigned int)&iargs[i], (unsigned int)iargs); 4076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_iargs16 (void) 4080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 4082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i = 0; i < nb_ii16; i++) { 4083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("iarg16 %d: %08x %08x %08x\n", i, ii16[i], 4084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (unsigned int)&ii16[i], (unsigned int)ii16); 4085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_vfargs (void) 4089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4090f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vector float vf; 4091f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion float f; 4092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i=0; 4093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_vfargs; i++) { 4094f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vf = (vector float)vfargs[i]; 4095f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion f = ((float*)&vf)[0]; 4096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("vfarg %3d: %24f : %08x\n", i, f, ((unsigned int*)&f)[0]); 4097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4101530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_three_args (const char* name, test_func_t func, 4102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k; 4106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_iargs; j++) { 4109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = iargs[j]; 4112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r16 = iargs[k]; 4113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n", 4134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], iargs[j], iargs[k], res, flags, xer); 4135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4141530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_two_args (const char* name, test_func_t func, 4142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t test_flags) 4143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, xer_orig, tmpcr, tmpxer; 4145664c85989cc01a6885489b299d849eecab53abbesewardj int i, j, is_div; 4146664c85989cc01a6885489b299d849eecab53abbesewardj 4147664c85989cc01a6885489b299d849eecab53abbesewardj // catches div, divwu, divo, divwu, divwuo, and . variants 4148664c85989cc01a6885489b299d849eecab53abbesewardj is_div = NULL != strstr(name, "divw"); 4149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer_orig = 0x00000000; 4151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj redo: 4152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_iargs; j++) { 4154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = iargs[j]; 4156664c85989cc01a6885489b299d849eecab53abbesewardj /* result of division by zero is implementation dependent. 4157664c85989cc01a6885489b299d849eecab53abbesewardj don't test it. */ 4158664c85989cc01a6885489b299d849eecab53abbesewardj if (is_div && iargs[j] == 0) 4159664c85989cc01a6885489b299d849eecab53abbesewardj continue; 4160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = xer_orig; 4169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %08x => %08x (%08x %08x)\n", 4182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], iargs[j], res, flags, xer); 4183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4186664c85989cc01a6885489b299d849eecab53abbesewardj if ((test_flags & PPC_XER_CA) && xer_orig == 0x00000000) { 4187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer_orig = 0x20000000; 4188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj goto redo; 4189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4192530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_one_arg (const char* name, test_func_t func, 4193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t test_flags) 4194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, xer_orig, tmpcr, tmpxer; 4196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 4197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer_orig = 0x00000000; 4199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj redo: 4200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = xer_orig; 4211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x => %08x (%08x %08x)\n", 4224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], res, flags, xer); 4225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4226664c85989cc01a6885489b299d849eecab53abbesewardj if ((test_flags & PPC_XER_CA) && xer_orig == 0x00000000) { 4227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer_orig = 0x20000000; 4228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj goto redo; 4229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void invalidate_icache ( void *ptr, int nbytes ) 4233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int startaddr = (unsigned int) ptr; 4235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int endaddr = startaddr + nbytes; 4236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int cls = 32; /*VG_(cache_line_size_ppc32);*/ 4237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int addr; 4238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj startaddr &= ~(cls - 1); 4240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (addr = startaddr; addr < endaddr; addr += cls) 4241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj asm volatile("dcbst 0,%0" : : "r" (addr)); 4242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj asm volatile("sync"); 4243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (addr = startaddr; addr < endaddr; addr += cls) 4244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj asm volatile("icbi 0,%0" : : "r" (addr)); 4245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj asm volatile("sync; isync"); 4246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* for god knows what reason, if this isn't inlined, the 4249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj program segfaults. */ 4250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void _patch_op_imm (void *out, void *in, 4251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint16_t imm, int sh, int len) 4252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t *p, *q; 4254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = out; 4256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj q = in; 4257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *p = (*q & ~(((1 << len) - 1) << sh)) | ((imm & ((1 << len) - 1)) << sh); 4258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void patch_op_imm (void *out, void *in, 4261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint16_t imm, int sh, int len) 4262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t *p; 4264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = out; 4266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj _patch_op_imm(out, in, imm, sh, len); 4267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj invalidate_icache(out, 4); 4268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void patch_op_imm16 (void *out, void *in, uint16_t imm) 4271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(out, in, imm, 0, 16); 4273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4275530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_one_reg_imm16 (const char* name, 4276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func, 4277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 4282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_ii16; j++) { 4285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("copy func %s from %p to %p (%08x %08x)\n", 4288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, func, func_buf, p[0], p[1]); 4289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm16(func_buf, p, ii16[j]); 4292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" => func %s from %p to %p (%08x %08x)\n", 4295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, func, func_buf, func_buf[0], func_buf[1]); 4296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %08x => %08x (%08x %08x)\n", 4319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], ii16[j], res, flags, xer); 4320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Special test cases for: 4326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwimi 4327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwinm 4328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwnm 4329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * srawi 4330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrf 4331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrfs 4332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrxr_cb 4333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mfcr_cb 4334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mfspr_cb 4335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mftb_cb 4336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtcrf_cb 4337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtspr_cb 4338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 4339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4340530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void rlwi_cb (const char* name, test_func_t func, 4341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k, l; 4346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = (arg_list_size == 0) ? 31 : 3; 4348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<32; j+=arg_step) { 4351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<32; k+=arg_step) { 4352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (l=0; l<32; l+=arg_step) { 4353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj _patch_op_imm(func_buf, p, j, 11, 5); 4356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj _patch_op_imm(func_buf, p, k, 6, 5); 4357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, l, 1, 5); 4358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %d, %d, %d => %08x (%08x %08x)\n", 4381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], j, k, l, res, flags, xer); 4382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4389530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void rlwnm_cb (const char* name, test_func_t func, 4390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k, l; 4395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = (arg_list_size == 0) ? 31 : 3; 4397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_iargs; j++) { 4400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<32; k+=arg_step) { 4401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (l=0; l<32; l+=arg_step) { 4402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj _patch_op_imm(func_buf, p, k, 6, 5); 4405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, l, 1, 5); 4406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = iargs[j]; 4409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %08x, %d, %d => %08x (%08x %08x)\n", 4430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], iargs[j], k, l, res, flags, xer); 4431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4438530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void srawi_cb (const char* name, test_func_t func, 4439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 4444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = (arg_list_size == 0) ? 31 : 1; 4446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<32; j+=arg_step) { 4449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, j, 11, 5); 4452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %d => %08x (%08x %08x)\n", 4475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], j, res, flags, xer); 4476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4481530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mcrf_cb (const char* name, test_func_t func, 4482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, xer, tmpcr, tmpxer; 4486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k; 4487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = (arg_list_size == 0) ? 7 : 1; 4489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<8; j+=arg_step) { 4492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<8; k+=arg_step) { 4493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj _patch_op_imm(func_buf, p, j, 23, 3); 4496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, k, 18, 3); 4497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 14"); 4507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, %d (%08x) => (%08x %08x)\n", 4519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, k, iargs[i], flags, xer); 4520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4527530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mcrfs_cb (const char* name, test_func_t func, 4528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{} 4530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4533530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mcrxr_cb (const char* name, test_func_t func, 4534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, xer, tmpcr, tmpxer; 4538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k; 4539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = 1; //(arg_list_size == 0) ? 7 : 1; 4541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<16; i+=arg_step) { 4543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i << 28; 4544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<8; k+=arg_step) { 4545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, k, 23, 3); 4548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = j; 4550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 14"); 4559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d (%08x) => (%08x %08x)\n", 4570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, k, j, flags, xer); 4571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4576530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mfcr_cb (const char* name, test_func_t func, 4577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 4581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 14"); 4592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s (%08x) => %08x (%08x %08x)\n", 4605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], res, flags, xer); 4606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// NOTE: Not using func: calling function kills lr 4610530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mfspr_cb (const char* name, test_func_t func, 4611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4613fdeaa95698883fa09d0abefa4511cfab6466e316sewardj //volatile uint32_t res, flags, xer, ctr, lr, tmpcr, tmpxer; 4614fdeaa95698883fa09d0abefa4511cfab6466e316sewardj int j, k, res; 4615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Call func, just to stop compiler complaining 4617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4619941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj // mtxer followed by mfxer 4620941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj for (k=0; k<nb_iargs; k++) { 4621941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj j = iargs[k]; 4622941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj __asm__ __volatile__( 4623941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj "mtxer %1\n" 4624941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj "\tmfxer %0" 4625941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj : /*out*/"=r"(res) : /*in*/"r"(j) : /*trashed*/"xer" 4626941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj ); 4627941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj res &= 0xE000007F; /* rest of the bits are undefined */ 4628941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj printf("%s: %08x -> mtxer -> mfxer => %08x\n", 4629941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj name, j, res); 4630941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj } 4631941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj 4632941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj // mtlr followed by mflr 4633941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj for (k=0; k<nb_iargs; k++) { 4634941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj j = iargs[k]; 4635941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj __asm__ __volatile__( 4636941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj "mtlr %1\n" 4637941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj "\tmflr %0" 4638941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj : /*out*/"=r"(res) : /*in*/"r"(j) : /*trashed*/"lr" 4639941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj ); 4640941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj printf("%s: %08x -> mtlr -> mflr => %08x\n", 4641941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj name, j, res); 4642941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj } 4643941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj 4644941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj // mtctr followed by mfctr 4645941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj for (k=0; k<nb_iargs; k++) { 4646941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj j = iargs[k]; 4647941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj __asm__ __volatile__( 4648941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj "mtctr %1\n" 4649941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj "\tmfctr %0" 4650941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj : /*out*/"=r"(res) : /*in*/"r"(j) : /*trashed*/"ctr" 4651941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj ); 4652941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj printf("%s: %08x -> mtctr -> mfctr => %08x\n", 4653941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj name, j, res); 4654941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj } 4655941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj 4656941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj#if 0 4657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mfxer 4658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 1; 4659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Only valid bits of xer: 0xE000007F 4670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lis 15,0xE000"); 4671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addi 15,15,0x007F"); 4672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("and 16,15,14"); 4673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 16"); 4676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 18"); 4677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 18"); 4678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfspr 17, 1"); // func() 4680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 4686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 4687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 18"); 4688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r18; 4689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n", 4698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[k], res, flags, xer, lr, ctr); 4699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mflr 4703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 8; 4704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 14"); 4717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 18"); 4718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfspr 17, 8"); // func() 4721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 4727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 4728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 18"); 4729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r18; 4730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n", 4739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[k], res, flags, xer, lr, ctr); 4740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mfctr 4744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 9; 4745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 14"); 4758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 18"); 4760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfspr 17, 9"); // func() 4762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 4768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 4769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 18"); 4770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r18; 4771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n", 4780f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion name, j, iargs[k], res, flags, xer, lr, ctr); 4781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4782941051f9c5677a9ab62f9ccf82a124cbc0bbb5basewardj#endif 4783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4786530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mftb_cb (const char* name, test_func_t func, 4787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// How to test this? 4790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// 1) TBU won't change for a while 4791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// 2) TBL will have changed every loop iter 4792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 4795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj i = 269; 4797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<16; j++) { 4798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mftb 17, 269"); // func 4809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d => %08x (%08x %08x)\n", 4821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, i, res, flags, xer); 4822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj i = 268; 4826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<16; j++) { 4827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mftb 17, 268"); // func 4838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d => %08x (%08x %08x)\n", 4850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, i, res, flags, xer); 4851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4855530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mtcrf_cb (const char* name, test_func_t func, 4856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, xer, tmpcr, tmpxer; 4860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 4861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = (arg_list_size == 0) ? 99 : 1; 4863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<256; j+=arg_step) { 4866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, j, 12, 8); 4869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, %08x => (%08x %08x)\n", 4891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[i], flags, xer); 4892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// NOTE: Not using func: calling function kills lr 4898530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mtspr_cb (const char* name, test_func_t func, 4899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4901fdeaa95698883fa09d0abefa4511cfab6466e316sewardj#if 0 4902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, xer, ctr, lr, tmpcr, tmpxer; 4903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int j, k; 4904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Call func, just to stop compiler complaining 4906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mtxer 4909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 1; 4910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Only valid bits of xer: 0xE000007F 4923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // VEX masks these (maybe it shouldn't?), so let's do it first: 4924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lis 15,0xE000"); 4925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addi 15,15,0x007F"); 4926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("and 16,15,14"); 4927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 18"); 4931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 18"); 4932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 16"); // func() 4934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 4940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 4941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 18"); 4942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r18; 4943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n", 4951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[k], flags, xer, lr, ctr); 4952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mtlr 4956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 8; 4957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0x0; 4968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 18"); 4970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 18"); 4971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 14"); // func() 4974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 4980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 4981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 17"); // CAB: if 18, bashes lr - bad gcc opt? 4982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r17; 4983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n", 4991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[k], flags, xer, lr, ctr); 4992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mtctr 4996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 9; 4997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 18"); 5010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 18"); 5012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 14"); // func() 5014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 5017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 5020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 5021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 17"); 5022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r17; 5023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n", 5031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[k], flags, xer, lr, ctr); 5032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5033fdeaa95698883fa09d0abefa4511cfab6466e316sewardj#endif 5034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct special_t special_t; 5039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct special_t { 5041530f73578552bc876a51fbf90cb6be29769bb362sewardj const char *name; 5042530f73578552bc876a51fbf90cb6be29769bb362sewardj void (*test_cb)(const char* name, test_func_t func, 5043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags); 5044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 5045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_special (special_t *table, 5047530f73578552bc876a51fbf90cb6be29769bb362sewardj const char* name, test_func_t func, 5048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5050530f73578552bc876a51fbf90cb6be29769bb362sewardj const char *tmp; 5051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 5052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (tmp = name; isspace(*tmp); tmp++) 5054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 5055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; table[i].name != NULL; i++) { 5056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 5057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "look for handler for '%s' (%s)\n", name, 5058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj table[i].name); 5059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (strcmp(table[i].name, tmp) == 0) { 5061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*table[i].test_cb)(name, func, test_flags); 5062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return; 5063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "ERROR: no test found for op '%s'\n", name); 5066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_int_ops[] = { 5069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwimi", /* One register + 3 5 bits immediate arguments */ 5071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwi_cb, 5072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwimi.", /* One register + 3 5 bits immediate arguments */ 5075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwi_cb, 5076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwinm", /* One register + 3 5 bits immediate arguments */ 5079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwi_cb, 5080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwinm.", /* One register + 3 5 bits immediate arguments */ 5083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwi_cb, 5084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwnm", /* Two registers + 2 5 bits immediate arguments */ 5087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwnm_cb, 5088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwnm.", /* Two registers + 2 5 bits immediate arguments */ 5091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwnm_cb, 5092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "srawi", /* One register + 1 5 bits immediate arguments */ 5095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &srawi_cb, 5096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "srawi.", /* One register + 1 5 bits immediate arguments */ 5099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &srawi_cb, 5100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mcrf", /* 2 3 bits immediate arguments */ 5103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mcrf_cb, 5104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 5106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mcrfs", /* 2 3 bits immediate arguments */ 5108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mcrfs_cb, 5109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mcrxr", /* 1 3 bits immediate argument */ 5113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mcrxr_cb, 5114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mfcr", /* No arguments */ 5117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mfcr_cb, 5118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mfspr", /* 1 10 bits immediate argument */ 5121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mfspr_cb, 5122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 5124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { // Move from time base 5125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mftb", /* 1 10 bits immediate arguments */ 5126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mftb_cb, 5127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtcrf", /* One register + 1 8 bits immediate arguments */ 5131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtcrf_cb, 5132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtspr", /* One register + 1 10 bits immediate arguments */ 5135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtspr_cb, 5136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 5142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5143530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_special (const char* name, test_func_t func, 5144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t test_flags) 5145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_special(special_int_ops, name, func, test_flags); 5147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5150530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_ld_one_reg_imm16 (const char* name, 5151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func, 5152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 5155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, rA, flags, xer, tmpcr, tmpxer; 5156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 5157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // +ve d 5159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 5160c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion j = i * 4; // offset = i * sizeof(uint32_t) 5161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 5162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 5163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm16(func_buf, p, j); 5164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 5165c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r14 = (uint32_t)&iargs[0]; // base reg = start of array 5166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 5182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 5183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r14; 5184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, (%08x) => %08x, (%08x %08x)\n", 5192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, /*&iargs[0], */ iargs[i], res, /*rA, */ flags, xer); 5193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // -ve d 5197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i = -nb_iargs+1; i<=0; i++) { 5198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i * 4; // sizeof(uint32_t) 5199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 5200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 5201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm16(func_buf, p, j); 5202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 5203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = (uint32_t)&iargs[nb_iargs-1]; 5204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 5220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 5221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r14; 5222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, (%08x) => %08x (%08x %08x)\n", 5230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, /*&iargs[nb_iargs-1], */ iargs[nb_iargs-1+i], res, /*rA, */ flags, xer); 5231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5234530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_ld_two_regs (const char* name, 5235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func, 5236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, rA, flags, xer, tmpcr, tmpxer; 5239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 5240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // +ve d 5242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 5243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i * 4; // sizeof(uint32_t) 5244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = (uint32_t)&iargs[0]; 5245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = j; 5246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 5262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 5263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r14; 5264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d (%08x) => %08x (%08x %08x)\n", 5272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, /*&iargs[0], */ j, iargs[i], res, /*rA, */ flags, xer); 5273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5276530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_st_two_regs_imm16 (const char* name, 5277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func, 5278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 5281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t rA, flags, xer, tmpcr, tmpxer; 5282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 5283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t *iargs_priv; 5284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // private iargs table to store to 5286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs_priv = malloc(nb_iargs * sizeof(uint32_t)); 5287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) 5288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs_priv[i] = 0; 5289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // __asm__ __volatile__ ("stwu 14,0(15)"); 5291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // +ve d 5293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 5294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i * 4; // sizeof(uint32_t) 5295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 5296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 5297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm16(func_buf, p, j); 5298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 5299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; // read from iargs 5300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = (uint32_t)&iargs_priv[0]; // store to r15 + j 5301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 5317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r15; 5318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %d => %08x, (%08x %08x)\n", 5326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], j, /*&iargs_priv[0], */ iargs_priv[i], /*rA, */ flags, xer); 5327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // -ve d 5331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i = -nb_iargs+1; i<=0; i++) { 5332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i * 4; // sizeof(uint32_t) 5333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 5334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 5335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm16(func_buf, p, j); 5336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 5337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[nb_iargs-1+i]; // read from iargs 5338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = (uint32_t)&iargs_priv[nb_iargs-1]; // store to r15 + j 5339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 5355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r15; 5356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %d => %08x, (%08x %08x)\n", 5364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[nb_iargs-1+i], j, /*&iargs_priv[nb_iargs-1], */ iargs_priv[nb_iargs-1+i], /*rA, */ flags, xer); 5365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj free(iargs_priv); 5367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5369530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_st_three_regs (const char* name, 5370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func, 5371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t rA, flags, xer, tmpcr, tmpxer; 5374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 5375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t *iargs_priv; 5376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // private iargs table to store to 5378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs_priv = malloc(nb_iargs * sizeof(uint32_t)); 5379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) 5380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs_priv[i] = 0; 5381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 5383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i * 4; // sizeof(uint32_t) 5384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; // read from iargs 5385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = (uint32_t)&iargs_priv[0]; // store to r15 + j 5386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r16 = j; 5387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 5403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r15; 5404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %d => %08x, (%08x %08x)\n", 5412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], /*&iargs_priv[0], */ j, iargs_priv[i], /*rA, */ flags, xer); 5413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj free(iargs_priv); 5415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args 5419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj Elements correspond to enum test_flags::num args 5420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 5421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t int_loops[] = { 5422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_one_arg, 5423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_two_args, 5424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_three_args, 5425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_two_args, 5426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_one_reg_imm16, 5427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_one_reg_imm16, 5428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_special, 5429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_ld_one_reg_imm16, 5430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_ld_two_regs, 5431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_st_two_regs_imm16, 5432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_st_three_regs, 5433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 5434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 5436530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_three_args (const char* name, test_func_t func, 5437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj double res; 5440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t u0, u1, u2, ur; 5441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr, tmpxer; 5442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k; 5443c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5444586fb038935723146cb6950b38911aeb9fc12765cerion /* Note: using nb_normal_fargs: 5445586fb038935723146cb6950b38911aeb9fc12765cerion - not testing special values for these insns 5446586fb038935723146cb6950b38911aeb9fc12765cerion */ 5447586fb038935723146cb6950b38911aeb9fc12765cerion 5448586fb038935723146cb6950b38911aeb9fc12765cerion for (i=0; i<nb_normal_fargs; i+=3) { 5449586fb038935723146cb6950b38911aeb9fc12765cerion for (j=0; j<nb_normal_fargs; j+=5) { 5450586fb038935723146cb6950b38911aeb9fc12765cerion for (k=0; k<nb_normal_fargs; k+=7) { 5451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u0 = *(uint64_t *)(&fargs[i]); 5452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u1 = *(uint64_t *)(&fargs[j]); 5453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u2 = *(uint64_t *)(&fargs[k]); 5454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f14 = fargs[i]; 5455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f15 = fargs[j]; 5456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f16 = fargs[k]; 5457c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f18 = +0.0; 5468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtfsf 0xFF, 18"); 5469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = f17; 5473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ur = *(uint64_t *)(&res); 5474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5479586fb038935723146cb6950b38911aeb9fc12765cerion 5480586fb038935723146cb6950b38911aeb9fc12765cerion /* Note: zapping the bottom byte of the result, 5481586fb038935723146cb6950b38911aeb9fc12765cerion as vex's accuracy isn't perfect */ 5482586fb038935723146cb6950b38911aeb9fc12765cerion ur &= 0xFFFFFFFFFFFFFF00ULL; 5483586fb038935723146cb6950b38911aeb9fc12765cerion 5484586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS 5485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %016llx, %016llx, %016llx => %016llx (%08x)\n", 5486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, u0, u1, u2, ur, flags); 5487586fb038935723146cb6950b38911aeb9fc12765cerion#else 5488586fb038935723146cb6950b38911aeb9fc12765cerion printf("%s %016llx, %016llx, %016llx => %016llx\n", 5489586fb038935723146cb6950b38911aeb9fc12765cerion name, u0, u1, u2, ur); 5490586fb038935723146cb6950b38911aeb9fc12765cerion#endif 5491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5497530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_two_args (const char* name, test_func_t func, 5498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj double res; 5501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t u0, u1, ur; 5502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr, tmpxer; 5503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 5504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_fargs; i+=3) { 5506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_fargs; j+=5) { 5507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u0 = *(uint64_t *)(&fargs[i]); 5508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u1 = *(uint64_t *)(&fargs[j]); 5509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f14 = fargs[i]; 5510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f15 = fargs[j]; 5511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f18 = +0.0; 5521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtfsf 0xFF, 18"); 5522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = f17; 5526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ur = *(uint64_t *)(&res); 5527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5532586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS 5533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %016llx, %016llx => %016llx (%08x)\n", 5534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, u0, u1, ur, flags); 5535586fb038935723146cb6950b38911aeb9fc12765cerion#else 5536586fb038935723146cb6950b38911aeb9fc12765cerion printf("%s %016llx, %016llx => %016llx\n", 5537586fb038935723146cb6950b38911aeb9fc12765cerion name, u0, u1, ur); 5538586fb038935723146cb6950b38911aeb9fc12765cerion#endif 5539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5544530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_one_arg (const char* name, test_func_t func, 5545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj double res; 5548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t u0, ur; 5549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr, tmpxer; 5550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 5551586fb038935723146cb6950b38911aeb9fc12765cerion 5552586fb038935723146cb6950b38911aeb9fc12765cerion /* if we're testing fctiw or fctiwz, zap the hi 32bits, 5553586fb038935723146cb6950b38911aeb9fc12765cerion as they're undefined */ 5554586fb038935723146cb6950b38911aeb9fc12765cerion unsigned char zap_hi_32bits = strstr(name,"fctiw") ? 1 : 0; 5555586fb038935723146cb6950b38911aeb9fc12765cerion 5556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_fargs; i++) { 5557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u0 = *(uint64_t *)(&fargs[i]); 5558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f14 = fargs[i]; 5559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f18 = +0.0; 5569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtfsf 0xFF, 18"); 5570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = f17; 5574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ur = *(uint64_t *)(&res); 5575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5580586fb038935723146cb6950b38911aeb9fc12765cerion 5581586fb038935723146cb6950b38911aeb9fc12765cerion if (zap_hi_32bits != 0) 5582586fb038935723146cb6950b38911aeb9fc12765cerion ur &= 0xFFFFFFFFULL; 5583586fb038935723146cb6950b38911aeb9fc12765cerion 5584586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS 5585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %016llx => %016llx (%08x)\n", name, u0, ur, flags); 5586586fb038935723146cb6950b38911aeb9fc12765cerion#else 5587586fb038935723146cb6950b38911aeb9fc12765cerion printf("%s %016llx => %016llx\n", name, u0, ur); 5588586fb038935723146cb6950b38911aeb9fc12765cerion#endif 5589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Special test cases for: 5593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mffs 5594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtfsb0 5595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtfsb1 5596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 5597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_float_ops[] = { 5598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 5599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mffs", /* One 5 bits immediate argument */ 5601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mffs.", /* One 5 bits immediate argument */ 5605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsb0", /* One 5 bits immediate argument */ 5609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsb0.", /* One 5 bits immediate argument */ 5613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsb1", /* One 5 bits immediate argument */ 5617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsb1.", /* One 5 bits immediate argument */ 5621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsf", /* One register + 1 8 bits immediate argument */ 5625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtfsf_cb, 5626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsf.", /* One register + 1 8 bits immediate argument */ 5629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtfsf_cb, 5630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsfi", /* One 5 bits argument + 1 5 bits argument */ 5633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtfsfi_cb, 5634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsfi.", /* One 5 bits argument + 1 5 bits argument */ 5637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtfsfi_cb, 5638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 5645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5646530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_special (const char* name, test_func_t func, 5647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t test_flags) 5648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_special(special_float_ops, name, func, test_flags); 5650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5652c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5653c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_ld_one_reg_imm16 (const char* name, 5654c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion test_func_t func, 5655c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion unused uint32_t test_flags) 5656c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 5657c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion uint32_t base, func_buf[2], *p; 5658c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion volatile uint32_t flags, xer, tmpcr, tmpxer; 5659c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion volatile double src, res; 5660c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion int i, offs; 5661c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5662c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* offset within [1-nb_fargs:nb_fargs] */ 5663c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion for (i=1-nb_fargs; i<nb_fargs; i++) { 5664c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion offs = i * 8; // offset = i * sizeof(double) 5665c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion if (i < 0) { 5666c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion src = fargs[nb_fargs-1 + i]; 5667c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion base = (uint32_t)&fargs[nb_fargs-1]; 5668c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } else { 5669c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion src = fargs[i]; 5670c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion base = (uint32_t)&fargs[0]; 5671c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } 5672c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5673c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion p = (void *)func; 5674c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion func_buf[1] = p[1]; 5675c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion patch_op_imm16(func_buf, p, offs); 5676c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion func = (void *)func_buf; 5677c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5678c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion // load from fargs[idx] => r14 + offs 5679c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r14 = base; 5680c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5681c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Save flags */ 5682c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfcr 18"); 5683c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tmpcr = r18; 5684c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfxer 18"); 5685c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tmpxer = r18; 5686c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5687c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Set up flags for test */ 5688c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = 0; 5689c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtcr 18"); 5690c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtxer 18"); 5691c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion (*func)(); 5692c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfcr 18"); 5693c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion flags = r18; 5694c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfxer 18"); 5695c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion xer = r18; 5696c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion res = f17; 5697c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5698c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Restore flags */ 5699c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = tmpcr; 5700c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtcr 18"); 5701c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = tmpxer; 5702c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtxer 18"); 5703c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5704586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS 5705c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion printf("%s %016llx, %4d => %016llx, %08x (%08x %08x)\n", 5706c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion name, double_to_bits(src), offs, 5707c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion double_to_bits(res), r14, flags, xer); 5708586fb038935723146cb6950b38911aeb9fc12765cerion#else 5709586fb038935723146cb6950b38911aeb9fc12765cerion printf("%s %016llx, %4d => %016llx, %08x\n", 5710586fb038935723146cb6950b38911aeb9fc12765cerion name, double_to_bits(src), offs, 5711586fb038935723146cb6950b38911aeb9fc12765cerion double_to_bits(res), r14); 5712586fb038935723146cb6950b38911aeb9fc12765cerion#endif 5713c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } 5714c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion if (verbose) printf("\n"); 5715c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 5716c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5717c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_ld_two_regs (const char* name, 5718c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion test_func_t func, 5719c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion unused uint32_t test_flags) 5720c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 5721c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion volatile uint32_t base, flags, xer, tmpcr, tmpxer; 5722c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion volatile double src, res; 5723c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion int i; 5724c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5725c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* offset within [1-nb_fargs:nb_fargs] */ 5726c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion for (i=1-nb_fargs; i<nb_fargs; i++) { 5727c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r15 = i * 8; // offset = i * sizeof(double) 5728c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion if (i < 0) { // base reg = start of array 5729c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion src = fargs[nb_fargs-1 + i]; 5730c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion base = (uint32_t)&fargs[nb_fargs-1]; 5731c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } else { 5732c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion src = fargs[i]; 5733c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion base = (uint32_t)&fargs[0]; 5734c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } 5735c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5736c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r14 = base; 5737c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5738c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Save flags */ 5739c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfcr 18"); 5740c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tmpcr = r18; 5741c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfxer 18"); 5742c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tmpxer = r18; 5743c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5744c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Set up flags for test */ 5745c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = 0; 5746c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtcr 18"); 5747c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtxer 18"); 5748c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion (*func)(); 5749c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfcr 18"); 5750c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion flags = r18; 5751c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfxer 18"); 5752c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion xer = r18; 5753c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion res = f17; 5754c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5755c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Restore flags */ 5756c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = tmpcr; 5757c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtcr 18"); 5758c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = tmpxer; 5759c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtxer 18"); 5760c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5761586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS 5762c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion printf("%s %016llx, %4d => %016llx, %08x (%08x %08x)\n", 5763c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion name, double_to_bits(src), r15, 5764c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion double_to_bits(res), r14, flags, xer); 5765586fb038935723146cb6950b38911aeb9fc12765cerion#else 5766586fb038935723146cb6950b38911aeb9fc12765cerion printf("%s %016llx, %4d => %016llx, %08x\n", 5767586fb038935723146cb6950b38911aeb9fc12765cerion name, double_to_bits(src), r15, 5768586fb038935723146cb6950b38911aeb9fc12765cerion double_to_bits(res), r14); 5769586fb038935723146cb6950b38911aeb9fc12765cerion#endif 5770c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } 5771c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 5772c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5773c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_st_two_regs_imm16 (const char* name, 5774c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion test_func_t func, 5775c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion unused uint32_t test_flags) 5776c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 5777c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion uint32_t base, func_buf[2], *p; 5778c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion volatile uint32_t flags, xer, tmpcr, tmpxer; 5779c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion double src, *p_dst; 5780c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion int i, offs; 5781c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion double *fargs_priv; 5782586fb038935723146cb6950b38911aeb9fc12765cerion int nb_tmp_fargs = nb_fargs; 5783586fb038935723146cb6950b38911aeb9fc12765cerion 5784586fb038935723146cb6950b38911aeb9fc12765cerion /* if we're storing an fp single-precision, don't want nans 5785586fb038935723146cb6950b38911aeb9fc12765cerion - the vex implementation doesn't like them (yet) 5786586fb038935723146cb6950b38911aeb9fc12765cerion Note: This is actually a bigger problem: the vex implementation 5787586fb038935723146cb6950b38911aeb9fc12765cerion rounds these insns twice. This leads to many rounding errors. 5788586fb038935723146cb6950b38911aeb9fc12765cerion For the small fargs set, however, this doesn't show up. 5789586fb038935723146cb6950b38911aeb9fc12765cerion */ 5790586fb038935723146cb6950b38911aeb9fc12765cerion if (strstr(name, "stfs")) 5791586fb038935723146cb6950b38911aeb9fc12765cerion nb_tmp_fargs = nb_normal_fargs; 5792586fb038935723146cb6950b38911aeb9fc12765cerion 5793586fb038935723146cb6950b38911aeb9fc12765cerion 5794c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion // private fargs table to store to 5795586fb038935723146cb6950b38911aeb9fc12765cerion fargs_priv = malloc(nb_tmp_fargs * sizeof(double)); 5796c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5797586fb038935723146cb6950b38911aeb9fc12765cerion /* offset within [1-nb_tmp_fargs:nb_tmp_fargs] */ 5798586fb038935723146cb6950b38911aeb9fc12765cerion for (i=1-nb_tmp_fargs; i<nb_tmp_fargs; i++) { 5799c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion offs = i * 8; // offset = i * sizeof(double) 5800c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion if (i < 0) { 5801586fb038935723146cb6950b38911aeb9fc12765cerion src = fargs [nb_tmp_fargs-1 + i]; 5802586fb038935723146cb6950b38911aeb9fc12765cerion p_dst = &fargs_priv[nb_tmp_fargs-1 + i]; 5803586fb038935723146cb6950b38911aeb9fc12765cerion base = (uint32_t)&fargs_priv[nb_tmp_fargs-1]; 5804c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } else { 5805c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion src = fargs [i]; 5806c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion p_dst = &fargs_priv[i]; 5807c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion base = (uint32_t)&fargs_priv[0]; 5808c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } 5809c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion *p_dst = 0; // clear dst 5810c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5811c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion p = (void *)func; 5812c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion func_buf[1] = p[1]; 5813c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion patch_op_imm16(func_buf, p, offs); 5814c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion func = (void *)func_buf; 5815c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5816c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion // read from fargs[idx] => f14 5817c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion // store to fargs_priv[idx] => r15 + offs 5818c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion f14 = src; 5819c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r15 = base; 5820c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5821c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Save flags */ 5822c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfcr 18"); 5823c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tmpcr = r18; 5824c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfxer 18"); 5825c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tmpxer = r18; 5826c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5827c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Set up flags for test */ 5828c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = 0; 5829c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtcr 18"); 5830c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtxer 18"); 5831c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion (*func)(); 5832c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfcr 18"); 5833c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion flags = r18; 5834c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfxer 18"); 5835c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion xer = r18; 5836c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5837c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Restore flags */ 5838c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = tmpcr; 5839c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtcr 18"); 5840c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = tmpxer; 5841c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtxer 18"); 5842c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5843586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS 5844c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion printf("%s %016llx, %4d => %016llx, %08x (%08x %08x)\n", 5845c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion name, double_to_bits(src), offs, 5846c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion double_to_bits(*p_dst), r15, flags, xer); 5847586fb038935723146cb6950b38911aeb9fc12765cerion#else 5848586fb038935723146cb6950b38911aeb9fc12765cerion printf("%s %016llx, %4d => %016llx, %08x\n", 5849586fb038935723146cb6950b38911aeb9fc12765cerion name, double_to_bits(src), offs, 5850586fb038935723146cb6950b38911aeb9fc12765cerion double_to_bits(*p_dst), r15); 5851586fb038935723146cb6950b38911aeb9fc12765cerion#endif 5852c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } 5853c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion free(fargs_priv); 5854c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 5855c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5856c08c8c576fc16d32e6e572927d06b6dfae476e4dcerionstatic void test_float_st_three_regs (const char* name, 5857c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion test_func_t func, 5858c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion unused uint32_t test_flags) 5859c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion{ 5860c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion volatile uint32_t base, flags, xer, tmpcr, tmpxer; 5861c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion double src, *p_dst; 5862c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion int i, offs; 5863c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion double *fargs_priv; 5864586fb038935723146cb6950b38911aeb9fc12765cerion int nb_tmp_fargs = nb_fargs; 5865586fb038935723146cb6950b38911aeb9fc12765cerion 5866586fb038935723146cb6950b38911aeb9fc12765cerion /* if we're storing an fp single-precision, don't want nans 5867586fb038935723146cb6950b38911aeb9fc12765cerion - the vex implementation doesn't like them (yet) 5868586fb038935723146cb6950b38911aeb9fc12765cerion Note: This is actually a bigger problem: the vex implementation 5869586fb038935723146cb6950b38911aeb9fc12765cerion rounds these insns twice. This leads to many rounding errors. 5870586fb038935723146cb6950b38911aeb9fc12765cerion For the small fargs set, however, this doesn't show up. 5871586fb038935723146cb6950b38911aeb9fc12765cerion */ 5872586fb038935723146cb6950b38911aeb9fc12765cerion if (strstr(name, "stfs")) // stfs(u)(x) 5873586fb038935723146cb6950b38911aeb9fc12765cerion nb_tmp_fargs = nb_normal_fargs; 5874586fb038935723146cb6950b38911aeb9fc12765cerion 5875c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5876c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion // private fargs table to store to 5877586fb038935723146cb6950b38911aeb9fc12765cerion fargs_priv = malloc(nb_tmp_fargs * sizeof(double)); 5878c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5879586fb038935723146cb6950b38911aeb9fc12765cerion // /* offset within [1-nb_tmp_fargs:nb_tmp_fargs] */ 5880586fb038935723146cb6950b38911aeb9fc12765cerion // for (i=1-nb_tmp_fargs; i<nb_tmp_fargs; i++) { 5881586fb038935723146cb6950b38911aeb9fc12765cerion for (i=0; i<nb_tmp_fargs; i++) { 5882c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion offs = i * 8; // offset = i * sizeof(double) 5883c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion if (i < 0) { 5884586fb038935723146cb6950b38911aeb9fc12765cerion src = fargs [nb_tmp_fargs-1 + i]; 5885586fb038935723146cb6950b38911aeb9fc12765cerion p_dst = &fargs_priv[nb_tmp_fargs-1 + i]; 5886586fb038935723146cb6950b38911aeb9fc12765cerion base = (uint32_t)&fargs_priv[nb_tmp_fargs-1]; 5887c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } else { 5888c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion src = fargs [i]; 5889c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion p_dst = &fargs_priv[i]; 5890c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion base = (uint32_t)&fargs_priv[0]; 5891c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } 5892c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion *p_dst = 0; // clear dst 5893c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5894c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion f14 = src; // read from fargs 5895c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r15 = base; // store to r15 + offs 5896c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r16 = offs; 5897c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5898c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Save flags */ 5899c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfcr 18"); 5900c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tmpcr = r18; 5901c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfxer 18"); 5902c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion tmpxer = r18; 5903c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5904c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Set up flags for test */ 5905c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = 0; 5906c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtcr 18"); 5907c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtxer 18"); 5908c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion (*func)(); 5909c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfcr 18"); 5910c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion flags = r18; 5911c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mfxer 18"); 5912c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion xer = r18; 5913c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5914c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion /* Restore flags */ 5915c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = tmpcr; 5916c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtcr 18"); 5917c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r18 = tmpxer; 5918c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion __asm__ __volatile__ ("mtxer 18"); 5919c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5920586fb038935723146cb6950b38911aeb9fc12765cerion#if defined TEST_FLOAT_FLAGS 5921586fb038935723146cb6950b38911aeb9fc12765cerion printf("%s %016llx, %4d => %016llx, %08x (%08x %08x)\n", 5922586fb038935723146cb6950b38911aeb9fc12765cerion name, double_to_bits(src), offs, 5923586fb038935723146cb6950b38911aeb9fc12765cerion double_to_bits(*p_dst), r15, flags, xer); 5924586fb038935723146cb6950b38911aeb9fc12765cerion#else 5925586fb038935723146cb6950b38911aeb9fc12765cerion printf("%s %016llx, %4d => %016llx, %08x\n", 5926586fb038935723146cb6950b38911aeb9fc12765cerion name, double_to_bits(src), offs, 5927586fb038935723146cb6950b38911aeb9fc12765cerion double_to_bits(*p_dst), r15); 5928586fb038935723146cb6950b38911aeb9fc12765cerion#endif 5929586fb038935723146cb6950b38911aeb9fc12765cerion 5930586fb038935723146cb6950b38911aeb9fc12765cerion 5931586fb038935723146cb6950b38911aeb9fc12765cerion#if 0 5932586fb038935723146cb6950b38911aeb9fc12765cerion // print double precision result 5933c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion printf("%s %016llx (%014e), %4d => %016llx (%014e), %08x (%08x %08x)\n", 5934c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion name, double_to_bits(src), src, offs, 5935c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion double_to_bits(*p_dst), *p_dst, r15, flags, xer); 5936586fb038935723146cb6950b38911aeb9fc12765cerion 5937c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion // print single precision result 5938c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion printf("%s %016llx (%014e), %4d => %08x (%f), %08x (%08x %08x)\n", 5939c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion name, double_to_bits(src), src, offs, 5940c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion (uint32_t)(double_to_bits(*p_dst) >> 32), 5941c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion bits_to_float( (uint32_t)(double_to_bits(*p_dst) >> 32) ), 5942c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion r15, flags, xer); 5943c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion#endif 5944c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion } 5945c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion free(fargs_priv); 5946c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion} 5947c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5948c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion 5949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args 5950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj Elements correspond to enum test_flags::num args 5951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 5952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t float_loops[] = { 5953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_float_one_arg, 5954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_float_two_args, 5955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_float_three_args, 5956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_float_two_args, 5957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_float_special, 5960c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion &test_float_ld_one_reg_imm16, 5961c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion &test_float_ld_two_regs, 5962c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion &test_float_st_two_regs_imm16, 5963c08c8c576fc16d32e6e572927d06b6dfae476e4dcerion &test_float_st_three_regs, 5964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 5965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 5966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 5969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Ref: vector insns to test setting CR, VSCR: 5971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int v1 = 5972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF }; 5973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (vector unsigned int){ 0x80808080,0x80808080,0x80808080,0x80808080 }; 5974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int v2 = 5975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF }; 5976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (vector unsigned int){ 0x01010101,0x01010101,0x01010101,0x01010101 }; 5977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj //__asm__ __volatile__ ("vcmpequw. 31,%0,%1" : : "vr" (v1), "vr" (v2)); // sets CR[6] 5978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj //__asm__ __volatile__ ("vpkswss 31,%0,%1" : : "vr" (v1), "vr" (v2)); // sets VSCR[SAT] 5979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubsbs 31,%0,%1" : : "vr" (v1), "vr" (v2)); // sets VSCR[SAT] 5980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 5981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 59821b6b2b3e62549edc02744bbc149c74bcc043835ecerion//#define DEFAULT_VSCR 0x00010000 59831b6b2b3e62549edc02744bbc149c74bcc043835ecerion#define DEFAULT_VSCR 0x0 5984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5985530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_one_arg (const char* name, test_func_t func, 5986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 5989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 5990f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vec_in, vec_out, vscr; 5991f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src, *dst; 5992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 5993f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 5994f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 5995f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 5996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 5998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6002f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in = (vector unsigned int)viargs[i]; 6003f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector unsigned int){ 0,0,0,0 }; 6004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6006f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load input -> r14 6012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in)); 6013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6028f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src = (unsigned int*)&vec_in; 6029f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 6030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %08x %08x %08x %08x\n", name, 6031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src[0], src[1], src[2], src[3]); 6032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 6033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 6034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6035f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion p_vscr = (unsigned int*)𝓋 6036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 6037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 6039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6043530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_two_args (const char* name, test_func_t func, 6044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6048f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vec_in1, vec_in2, vec_out, vscr; 6049f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src1, *src2, *dst; 6050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j; 6051f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 6052f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 6053f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 6054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 6056f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in1 = (vector unsigned int)viargs[i]; 6057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_viargs; j++) { 6058f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in2 = (vector unsigned int)viargs[j]; 6059f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector unsigned int){ 0,0,0,0 }; 6060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6066f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15 6072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 6073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2)); 6074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6089f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src1 = (unsigned int*)&vec_in1; 6090f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src2 = (unsigned int*)&vec_in2; 6091f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 6092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: ", name); 6093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]); 6094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]); 6095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 6096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 6097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6098f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion p_vscr = (unsigned int*)𝓋 6099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 6100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 6102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 6105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6108530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_three_args (const char* name, test_func_t func, 6109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6113f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vec_in1, vec_in2, vec_in3, vec_out, vscr; 6114f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src1, *src2, *src3, *dst; 6115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j,k; 6116f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 6117f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 6118f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 6119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 6121f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in1 = (vector unsigned int)viargs[i]; 6122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_viargs; j++) { 6123f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in2 = (vector unsigned int)viargs[j]; 6124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_viargs; k++) { 6125f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in3 = (vector unsigned int)viargs[k]; 6126f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector unsigned int){ 0,0,0,0 }; 6127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6133f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15,r16 6139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 6140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2)); 6141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 16,%0,%0" : : "vr" (vec_in3)); 6142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6157f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src1 = (unsigned int*)&vec_in1; 6158f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src2 = (unsigned int*)&vec_in2; 6159f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src3 = (unsigned int*)&vec_in3; 6160f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 6161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name, 6162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src1[0], src1[1], src1[2], src1[3], 6163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src2[0], src2[1], src2[2], src2[3], 6164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src3[0], src3[1], src3[2], src3[3]); 6165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x%08x%08x%08x ", name, 6167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 6168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6169f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion p_vscr = (unsigned int*)𝓋 6170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 6171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 6173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 6176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6181530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vs128_cb (const char* name, test_func_t func, 6182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6186f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned char vec_shft; 6187f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vec_in1, vec_out, vscr; 6188f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src1, *src2, *dst; 6189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j; 6190f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 6191f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 6192f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 6193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 6195f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in1 = (vector unsigned int)viargs[i]; 6196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<8; j++) { 6197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* low-order 3bits of every byte must be the same for the shift vector */ 6198f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_shft = (vector unsigned char) { j,j,j,j, j,j,j,j, j,j,j,j, j,j,j,j }; 6199f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector unsigned int){ 0,0,0,0 }; 6200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6206f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15 6212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 6213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_shft)); 6214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6229f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src1 = (unsigned int*)&vec_in1; 6230f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src2 = (unsigned int*)&vec_shft; 6231f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 6232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: ", name); 6233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]); 6234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]); 6235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 6237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 6238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6239f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion p_vscr = (unsigned int*)𝓋 6240f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion printf("(%08x, %08x)\n", flags, p_vscr[3]); 6241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6242f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion printf("(%08x)\n", flags); 6243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 6246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6249530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vsplt_cb (const char* name, test_func_t func, 6250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6254f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vec_in1, vec_out, vscr; 6255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 6256f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src1, *dst; 6257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j; 6258f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 6259f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 6260f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 6261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 6263f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in1 = (vector unsigned int)viargs[i]; 6264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<16; j+=3) { 6266f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector unsigned int){ 0,0,0,0 }; 6267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Patch up the instruction */ 6269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 6270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 6271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, j, 16, 5); 6272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 6273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6279f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load input -> r14 6285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 6286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6301f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src1 = (unsigned int*)&vec_in1; 6302f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 6303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: ", name); 6304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x %08x %08x %08x, %u\n", src1[0], src1[1], src1[2], src1[3], j); 6305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 6307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 6308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6309f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion p_vscr = (unsigned int*)𝓋 6310f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion printf("(%08x, %08x)\n", flags, p_vscr[3]); 6311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6312f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion printf("(%08x)\n", flags); 6313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 6316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6319530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vspltis_cb (const char* name, test_func_t func, 6320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6324f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vec_out, vscr; 6325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 6326f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *dst; 6327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 6328f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 6329f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 6330f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 6331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<32; i++) { 6333f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector unsigned int){ 0,0,0,0 }; 6334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Patch up the instruction */ 6336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 6337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 6338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, i, 16, 5); 6339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 6340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6346f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6365f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 6366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %2d => ", name, i); 6367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 6369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6370f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion p_vscr = (unsigned int*)𝓋 6371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 6372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 6374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6378530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vsldoi_cb (const char* name, test_func_t func, 6379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6383f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vec_in1, vec_in2, vec_out, vscr; 6384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 6385f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src1, *src2, *dst; 6386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j,k; 6387f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 6388f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 6389f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 6390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 6392f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in1 = (vector unsigned int)viargs[i]; 6393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_viargs; j++) { 6394f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in2 = (vector unsigned int)viargs[j]; 6395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<16; k+=14) { 6396f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector unsigned int){ 0,0,0,0 }; 6397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Patch up the instruction */ 6399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 6400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 6401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, k, 6, 4); 6402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 6403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6409f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15 6415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 6416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2)); 6417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6432f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src1 = (unsigned int*)&vec_in1; 6433f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src2 = (unsigned int*)&vec_in2; 6434f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 6435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: ", name); 6436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x%08x%08x%08x, %08x%08x%08x%08x, %u\n", 6437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src1[0], src1[1], src1[2], src1[3], 6438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src2[0], src2[1], src2[2], src2[3], k); 6439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x] ", name, 6441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 6442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6443f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion p_vscr = (unsigned int*)𝓋 6444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 6445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 6447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 6450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 645405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion/* lvsl, lvsr */ 645505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void lvs_cb (const char *name, test_func_t func, 645605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion unused uint32_t test_flags) 645705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 645805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile uint32_t flags, tmpcr; 645905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int tmpvscr; 6460f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vec_out, vscr; 6461f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *dst; 646205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion int i; 6463f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 6464f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 6465f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 646605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 646705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (i=-1; i<17; i++) { 6468f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector unsigned int){ 0,0,0,0 }; 646905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 647005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // make sure start address is 16 aligned - use viargs[0] 647105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r15 = (uint32_t)&viargs[0]; 647205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r14 = i; 647305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 647405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Save flags */ 647505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 647605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 647705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 647805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // reset VSCR and CR 6479f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 648005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion flags = 0; 648105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 648205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 648305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 648405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // do stuff 648505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion (*func)(); 648605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 648705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // retrieve output <- r17 648805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 648905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 649005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // get CR,VSCR flags 649105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 649205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 649305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 649405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Restore flags */ 649505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 649605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 649705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 6498f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 649905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("%s %3d, %3d", name, i, 0); 650005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 650105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("(%08x)\n", flags); 650205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 650305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion if (verbose) printf("\n"); 650405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 650505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 6506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_av_int_ops[] = { 6507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 6508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vsr", /* Two registers arguments */ 6509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vs128_cb, 6510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 6511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 6512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vsl", /* Two registers arguments */ 6513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vs128_cb, 6514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 6515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 6516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vspltb", /* One reg, one 5-bit uimm arguments */ 6517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vsplt_cb, 6518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 6519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 6520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vsplth", /* One reg, one 5-bit uimm arguments */ 6521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vsplt_cb, 6522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 6523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 6524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vspltw", /* One reg, one 5-bit uimm arguments */ 6525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vsplt_cb, 6526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 6527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 6528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vspltisb", /* One reg, one 5-bit uimm arguments */ 6529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vspltis_cb, 6530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 6531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 6532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vspltish", /* One reg, one 5-bit uimm arguments */ 6533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vspltis_cb, 6534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 6535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 6536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vspltisw", /* One reg, one 5-bit uimm arguments */ 6537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vspltis_cb, 6538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 6539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 6540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vsldoi", /* Two regs, one 4-bit uimm arguments */ 6541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vsldoi_cb, 6542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 654305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { 654405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion "lvsl", /* Two regs */ 654505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion &lvs_cb, 654605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion }, 654705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { 654805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion "lvsr", /* Two regs */ 654905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion &lvs_cb, 655005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion }, 655105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { 655205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion NULL, 655305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion NULL, 655405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion }, 6555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 6556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6557530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_special (const char* name, test_func_t func, 6558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t test_flags) 6559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_special(special_av_int_ops, name, func, test_flags); 6561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 656305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_av_int_ld_two_regs (const char *name, 656405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion test_func_t func, 656505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion unused uint32_t test_flags) 656605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 656705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile uint32_t flags, tmpcr; 656805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int tmpvscr; 6569f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vec_in, vec_out, vscr; 6570f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src, *dst; 657181aab3c751b11fcfa6629b449c92bd7e3f459567sewardj int i,j, k, do_mask; 657281aab3c751b11fcfa6629b449c92bd7e3f459567sewardj 657381aab3c751b11fcfa6629b449c92bd7e3f459567sewardj do_mask = 0; 657481aab3c751b11fcfa6629b449c92bd7e3f459567sewardj if (strstr(name, "lvebx")) do_mask = 1; 657581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj if (strstr(name, "lvehx")) do_mask = 2; 657681aab3c751b11fcfa6629b449c92bd7e3f459567sewardj if (strstr(name, "lvewx")) do_mask = 4; 657705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 657805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (i=0; i<nb_viargs; i++) { 657905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (j=0; j<16; j+=7) { 6580f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector unsigned int){ 0,0,0,0 }; 658105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 658205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // load from viargs array + some dis-alignment 658305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r15 = (uint32_t)&viargs[0]; 658405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r14 = i*16 + j; 658505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 658605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Save flags */ 658705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 658805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 658905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 659005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // reset VSCR and CR 6591f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 659205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion flags = 0; 659305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 659405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 659581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj 659605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // do stuff 659705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion (*func)(); 659805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 659905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // retrieve output <- r17 660005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 660105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 660205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // get CR,VSCR flags 660305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 660405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 660505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 660605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Restore flags */ 660705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 660805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 660905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 6610f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in = (vector unsigned int)viargs[i]; 6611f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src = (unsigned int*)&vec_in; 6612f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 661381aab3c751b11fcfa6629b449c92bd7e3f459567sewardj 661481aab3c751b11fcfa6629b449c92bd7e3f459567sewardj /* For lvebx/lvehx/lvewx, as per the documentation, all of 661581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj the dest reg except the loaded bits are undefined 661681aab3c751b11fcfa6629b449c92bd7e3f459567sewardj afterwards. And different CPUs really do produce 661781aab3c751b11fcfa6629b449c92bd7e3f459567sewardj different results. So mask out bits of the result that 661881aab3c751b11fcfa6629b449c92bd7e3f459567sewardj are undefined so as to make the test work reliably. */ 661981aab3c751b11fcfa6629b449c92bd7e3f459567sewardj if (do_mask == 1) { 662081aab3c751b11fcfa6629b449c92bd7e3f459567sewardj char* p = (char*)dst; 662181aab3c751b11fcfa6629b449c92bd7e3f459567sewardj for (k = 0; k < 16; k++) 662281aab3c751b11fcfa6629b449c92bd7e3f459567sewardj if (k != j) 662381aab3c751b11fcfa6629b449c92bd7e3f459567sewardj p[k] = (char)0; 6624f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion } 662581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj if (do_mask == 2) { 662681aab3c751b11fcfa6629b449c92bd7e3f459567sewardj short* p = (short*)dst; 662781aab3c751b11fcfa6629b449c92bd7e3f459567sewardj for (k = 0; k < 8; k++) 662881aab3c751b11fcfa6629b449c92bd7e3f459567sewardj if (k != (j>>1)) 662981aab3c751b11fcfa6629b449c92bd7e3f459567sewardj p[k] = (short)0; 6630f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion } 663181aab3c751b11fcfa6629b449c92bd7e3f459567sewardj if (do_mask == 4) { 663281aab3c751b11fcfa6629b449c92bd7e3f459567sewardj int* p = (int*)dst; 663381aab3c751b11fcfa6629b449c92bd7e3f459567sewardj for (k = 0; k < 4; k++) 663481aab3c751b11fcfa6629b449c92bd7e3f459567sewardj if (k != (j>>2)) 663581aab3c751b11fcfa6629b449c92bd7e3f459567sewardj p[k] = (int)0; 6636f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion } 663781aab3c751b11fcfa6629b449c92bd7e3f459567sewardj 663805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]); 663905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 664005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("(%08x)\n", flags); 664105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 664205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion if (verbose) printf("\n"); 664305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 664405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 664505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 664605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 664705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_av_int_st_three_regs (const char *name, 664805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion test_func_t func, 664905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion unused uint32_t test_flags) 665005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 665105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile uint32_t flags, tmpcr; 665205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int tmpvscr; 6653f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vec_in, vec_out, vscr; 6654f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src, *dst; 665505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion int i,j; 665605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion vector unsigned int* viargs_priv; 665705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 665805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // private viargs table to store to 665981aab3c751b11fcfa6629b449c92bd7e3f459567sewardj viargs_priv = memalign(16,(nb_viargs * sizeof(vector unsigned int))); 666005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (i=0; i<nb_viargs; i++) 666105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion viargs_priv[i] = (vector unsigned int) { 0,0,0,0 }; 666205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 666305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (i=0; i<nb_viargs; i++) { 666405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (j=0; j<16; j+=7) { 666505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // read from viargs 6666f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in = (vector unsigned int)viargs[i]; 666705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 666805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // store to viargs_priv[0] + some dis-alignment 666905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r16 = (uint32_t)&viargs_priv[0]; 667005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r15 = i*16 + j; 667105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 667205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Save flags */ 667305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 667405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 667505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 667605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // reset VSCR and CR 6677f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 667805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion flags = 0; 667905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 668005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 668105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 668205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // load inputs -> r14 668305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in)); 668405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 668505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // do stuff 668605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion (*func)(); 668705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 668805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // Output stored in viargs_priv 668905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 669005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // get CR,VSCR flags 669105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 669205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 669305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 669405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Restore flags */ 669505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 669605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 669705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 6698f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector unsigned int)viargs_priv[i]; 6699f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src = (unsigned int*)&vec_in; 6700f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 670105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]); 670205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 670305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("(%08x)\n", flags); 670405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 670505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion if (verbose) printf("\n"); 670605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 670705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 670805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 6709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args 6710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj Elements correspond to enum test_flags::num args 6711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 6712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t altivec_int_loops[] = { 6713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_int_one_arg, 6714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_int_two_args, 6715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_int_three_args, 6716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_int_two_args, 6717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 6718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 6719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_int_special, 6720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 672105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion &test_av_int_ld_two_regs, 6722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 672305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion test_av_int_st_three_regs, 6724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 6725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6727530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_one_arg (const char* name, test_func_t func, 6728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6732f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector float vec_in, vec_out; 6733f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vscr; 6734f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src, *dst; 6735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 6736f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 6737f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 6738f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 6739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6740e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj /* if we're doing an estimation operation, arrange to zap the 6741e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj bottom byte of the result as it's basically garbage, and differs 6742e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj between cpus */ 6743e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj unsigned int mask 6744e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj = (strstr(name,"vrsqrtefp") || strstr(name,"vrefp")) 6745e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj ? 0xFFFFFF00 : 0xFFFFFFFF; 6746e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj 6747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_vfargs; i++) { 6748f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in = (vector float)vfargs[i]; 6749f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 }; 6750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6756f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load input -> r14 6762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in)); 6763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6778f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src = (unsigned int*)&vec_in; 6779f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 6780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %08x %08x %08x %08x\n", name, 6781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src[0], src[1], src[2], src[3]); 6782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 6784e70e7c28cdbc784bc1d2eec15513fd56af0f780dsewardj dst[0] & mask, dst[1] & mask, dst[2] & mask, dst[3] & mask); 6785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6786f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion p_vscr = (unsigned int*)𝓋 6787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 6788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 6790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6794530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_two_args (const char* name, test_func_t func, 6795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6799f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector float vec_in1, vec_in2, vec_out; 6800f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vscr; 6801f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src1, *src2, *dst; 6802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j; 6803f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 6804f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 6805f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 6806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_vfargs; i++) { 6808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_vfargs; j+=3) { 6809f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in1 = (vector float)vfargs[i]; 6810f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in2 = (vector float)vfargs[j]; 6811f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 }; 6812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6818f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15 6824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 6825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2)); 6826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6841f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src1 = (unsigned int*)&vec_in1; 6842f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src2 = (unsigned int*)&vec_in2; 6843f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 6844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x\n", name, 6845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src1[0], src1[1], src1[2], src1[3], 6846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src2[0], src2[1], src2[2], src2[3]); 6847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 6849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 6850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6851f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion p_vscr = (unsigned int*)𝓋 6852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 6853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 6855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 6858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6861530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_three_args (const char* name, test_func_t func, 6862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6866f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector float vec_in1, vec_in2, vec_in3, vec_out; 6867f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vscr; 6868f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src1, *src2, *src3, *dst; 6869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j,k; 6870f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 6871f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 6872f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 6873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_vfargs; i++) { 6875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_vfargs; j+=3) { 6876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_vfargs; k+=5) { 6877f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in1 = (vector float)vfargs[i]; 6878f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in2 = (vector float)vfargs[j]; 6879f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in3 = (vector float)vfargs[k]; 6880f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 }; 6881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6887f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 6888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15,r16 6893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 6894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2)); 6895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 16,%0,%0" : : "vr" (vec_in3)); 6896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6911f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src1 = (unsigned int*)&vec_in1; 6912f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src2 = (unsigned int*)&vec_in2; 6913f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src3 = (unsigned int*)&vec_in3; 6914f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 6915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name, 6916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src1[0], src1[1], src1[2], src1[3], 6917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src2[0], src2[1], src2[2], src2[3], 6918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src3[0], src3[1], src3[2], src3[3]); 6919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 6921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 6922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6923f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion p_vscr = (unsigned int*)𝓋 6924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 6925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 6927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 6930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 69348f5fc19da719edcd8dfca920837bde7ce1d3accacerionstatic void vcvt_cb (const char* name, test_func_t func, 69358f5fc19da719edcd8dfca920837bde7ce1d3accacerion unused uint32_t test_flags) 69368f5fc19da719edcd8dfca920837bde7ce1d3accacerion{ 69378f5fc19da719edcd8dfca920837bde7ce1d3accacerion volatile uint32_t flags, tmpcr; 69388f5fc19da719edcd8dfca920837bde7ce1d3accacerion volatile vector unsigned int tmpvscr; 6939f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion volatile vector unsigned int vec_in, vec_out, vscr; 69408f5fc19da719edcd8dfca920837bde7ce1d3accacerion uint32_t func_buf[2], *p; 6941f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int *src, *dst; 69428f5fc19da719edcd8dfca920837bde7ce1d3accacerion int i,j; 6943f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#if defined TEST_VSCR_SAT 6944f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion unsigned int* p_vscr; 6945f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion#endif 69468f5fc19da719edcd8dfca920837bde7ce1d3accacerion 69478f5fc19da719edcd8dfca920837bde7ce1d3accacerion for (i=0; i<nb_vfargs; i++) { 6948f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_in = (vector unsigned int)vfargs[i]; 69498f5fc19da719edcd8dfca920837bde7ce1d3accacerion 69508f5fc19da719edcd8dfca920837bde7ce1d3accacerion for (j=0; j<32; j+=9) { 6951f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vec_out = (vector unsigned int){ 0,0,0,0 }; 69528f5fc19da719edcd8dfca920837bde7ce1d3accacerion 69538f5fc19da719edcd8dfca920837bde7ce1d3accacerion /* Patch up the instruction */ 69548f5fc19da719edcd8dfca920837bde7ce1d3accacerion p = (void *)func; 69558f5fc19da719edcd8dfca920837bde7ce1d3accacerion func_buf[1] = p[1]; 69568f5fc19da719edcd8dfca920837bde7ce1d3accacerion patch_op_imm(func_buf, p, j, 16, 5); 69578f5fc19da719edcd8dfca920837bde7ce1d3accacerion func = (void *)func_buf; 69588f5fc19da719edcd8dfca920837bde7ce1d3accacerion 69598f5fc19da719edcd8dfca920837bde7ce1d3accacerion /* Save flags */ 69608f5fc19da719edcd8dfca920837bde7ce1d3accacerion __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 69618f5fc19da719edcd8dfca920837bde7ce1d3accacerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 69628f5fc19da719edcd8dfca920837bde7ce1d3accacerion 69638f5fc19da719edcd8dfca920837bde7ce1d3accacerion // reset VSCR and CR 6964f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 69658f5fc19da719edcd8dfca920837bde7ce1d3accacerion flags = 0; 69668f5fc19da719edcd8dfca920837bde7ce1d3accacerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 69678f5fc19da719edcd8dfca920837bde7ce1d3accacerion __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 69688f5fc19da719edcd8dfca920837bde7ce1d3accacerion 69698f5fc19da719edcd8dfca920837bde7ce1d3accacerion // load input -> r14 6970f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in)); 69718f5fc19da719edcd8dfca920837bde7ce1d3accacerion 69728f5fc19da719edcd8dfca920837bde7ce1d3accacerion // do stuff 69738f5fc19da719edcd8dfca920837bde7ce1d3accacerion (*func)(); 69748f5fc19da719edcd8dfca920837bde7ce1d3accacerion 69758f5fc19da719edcd8dfca920837bde7ce1d3accacerion // retrieve output <- r17 69768f5fc19da719edcd8dfca920837bde7ce1d3accacerion __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 69778f5fc19da719edcd8dfca920837bde7ce1d3accacerion 69788f5fc19da719edcd8dfca920837bde7ce1d3accacerion // get CR,VSCR flags 69798f5fc19da719edcd8dfca920837bde7ce1d3accacerion __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 69808f5fc19da719edcd8dfca920837bde7ce1d3accacerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 69818f5fc19da719edcd8dfca920837bde7ce1d3accacerion 69828f5fc19da719edcd8dfca920837bde7ce1d3accacerion /* Restore flags */ 69838f5fc19da719edcd8dfca920837bde7ce1d3accacerion __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 69848f5fc19da719edcd8dfca920837bde7ce1d3accacerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 69858f5fc19da719edcd8dfca920837bde7ce1d3accacerion 6986f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion src = (unsigned int*)&vec_in; 6987f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion dst = (unsigned int*)&vec_out; 6988f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion printf("%s: %08x (%13e), %2u", name, src[0], *(float*)(&src[0]), j); 69898f5fc19da719edcd8dfca920837bde7ce1d3accacerion printf(" => %08x (%13e) ", dst[0], *(float*)(&dst[0])); 69908f5fc19da719edcd8dfca920837bde7ce1d3accacerion// printf(" => %08x ", dst[0]); 69918f5fc19da719edcd8dfca920837bde7ce1d3accacerion#if defined TEST_VSCR_SAT 6992f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion p_vscr = (unsigned int*)𝓋 69938f5fc19da719edcd8dfca920837bde7ce1d3accacerion printf("(%08x, %08x)\n", flags, p_vscr[3]); 69948f5fc19da719edcd8dfca920837bde7ce1d3accacerion#else 69958f5fc19da719edcd8dfca920837bde7ce1d3accacerion printf("(%08x)\n", flags); 69968f5fc19da719edcd8dfca920837bde7ce1d3accacerion#endif 69978f5fc19da719edcd8dfca920837bde7ce1d3accacerion } 69988f5fc19da719edcd8dfca920837bde7ce1d3accacerion if (verbose) printf("\n"); 69998f5fc19da719edcd8dfca920837bde7ce1d3accacerion } 70008f5fc19da719edcd8dfca920837bde7ce1d3accacerion} 70018f5fc19da719edcd8dfca920837bde7ce1d3accacerion 70028f5fc19da719edcd8dfca920837bde7ce1d3accacerionstatic special_t special_av_float_ops[] = { 70038f5fc19da719edcd8dfca920837bde7ce1d3accacerion { 70048f5fc19da719edcd8dfca920837bde7ce1d3accacerion "vcfux", /* One reg, one 5-bit uimm argument */ 70058f5fc19da719edcd8dfca920837bde7ce1d3accacerion &vcvt_cb, 70068f5fc19da719edcd8dfca920837bde7ce1d3accacerion }, 70078f5fc19da719edcd8dfca920837bde7ce1d3accacerion { 70088f5fc19da719edcd8dfca920837bde7ce1d3accacerion "vcfsx", /* One reg, one 5-bit uimm argument */ 70098f5fc19da719edcd8dfca920837bde7ce1d3accacerion &vcvt_cb, 70108f5fc19da719edcd8dfca920837bde7ce1d3accacerion }, 70118f5fc19da719edcd8dfca920837bde7ce1d3accacerion { 70128f5fc19da719edcd8dfca920837bde7ce1d3accacerion "vctuxs", /* One reg, one 5-bit uimm argument */ 70138f5fc19da719edcd8dfca920837bde7ce1d3accacerion &vcvt_cb, 70148f5fc19da719edcd8dfca920837bde7ce1d3accacerion }, 70158f5fc19da719edcd8dfca920837bde7ce1d3accacerion { 70168f5fc19da719edcd8dfca920837bde7ce1d3accacerion "vcfux", /* One reg, one 5-bit uimm argument */ 70178f5fc19da719edcd8dfca920837bde7ce1d3accacerion &vcvt_cb, 70188f5fc19da719edcd8dfca920837bde7ce1d3accacerion }, 70198f5fc19da719edcd8dfca920837bde7ce1d3accacerion { 70208f5fc19da719edcd8dfca920837bde7ce1d3accacerion "vctsxs", /* One reg, one 5-bit uimm argument */ 70218f5fc19da719edcd8dfca920837bde7ce1d3accacerion &vcvt_cb, 70228f5fc19da719edcd8dfca920837bde7ce1d3accacerion }, 70238f5fc19da719edcd8dfca920837bde7ce1d3accacerion { 70248f5fc19da719edcd8dfca920837bde7ce1d3accacerion NULL, 70258f5fc19da719edcd8dfca920837bde7ce1d3accacerion NULL, 70268f5fc19da719edcd8dfca920837bde7ce1d3accacerion }, 70278f5fc19da719edcd8dfca920837bde7ce1d3accacerion}; 70288f5fc19da719edcd8dfca920837bde7ce1d3accacerion 70298f5fc19da719edcd8dfca920837bde7ce1d3accacerionstatic void test_av_float_special (const char* name, test_func_t func, 70308f5fc19da719edcd8dfca920837bde7ce1d3accacerion uint32_t test_flags) 70318f5fc19da719edcd8dfca920837bde7ce1d3accacerion{ 70328f5fc19da719edcd8dfca920837bde7ce1d3accacerion test_special(special_av_float_ops, name, func, test_flags); 70338f5fc19da719edcd8dfca920837bde7ce1d3accacerion} 70348f5fc19da719edcd8dfca920837bde7ce1d3accacerion 7035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args 7036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj Elements correspond to enum test_flags::num args 7037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 7038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t altivec_float_loops[] = { 7039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_float_one_arg, 7040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_float_two_args, 7041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_float_three_args, 7042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_float_two_args, 7043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 7044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 70458f5fc19da719edcd8dfca920837bde7ce1d3accacerion &test_av_float_special, 7046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 7047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 7048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 7049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 7050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 7051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 7053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 7056530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_ppc405 (const char* name, test_func_t func, 7057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 7058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 7059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 7060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k; 7061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 7063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_iargs; j++) { 7064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 7065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 7066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = iargs[j]; 7067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Beware: the third argument and the result 7068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * are in the same register 7069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 7070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r17 = iargs[k]; 7071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 7072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 7073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 7074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 7075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 7076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 7077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 7078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 7079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 7080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 7081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 7082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 7083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 7084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 7085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 7086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 7087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 7088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 7089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 7090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 7091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n", 7092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], iargs[j], iargs[k], res, flags, xer); 7093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 7095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 7098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 7099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7100530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic int check_filter (char *filter) 7101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 7102530f73578552bc876a51fbf90cb6be29769bb362sewardj char *c; 7103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int ret = 1; 7104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (filter != NULL) { 7106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj c = strchr(filter, '*'); 7107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (c != NULL) { 7108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *c = '\0'; 7109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ret = 0; 7110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return ret; 7114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 7115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7116530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic int check_name (const char* name, const char *filter, 7117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int exact) 7118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 7119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int nlen, flen; 7120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int ret = 0; 7121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (filter != NULL) { 7123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (; isspace(*name); name++) 7124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 7125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj FDPRINTF("Check '%s' againt '%s' (%s match)\n", 7126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, filter, exact ? "exact" : "starting"); 7127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nlen = strlen(name); 7128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flen = strlen(filter); 7129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (exact) { 7130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (nlen == flen && memcmp(name, filter, flen) == 0) 7131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ret = 1; 7132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { 7133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (flen <= nlen && memcmp(name, filter, flen) == 0) 7134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ret = 1; 7135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { 7137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ret = 1; 7138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return ret; 7140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 7141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct insn_sel_flags_t_struct { 7145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int one_arg, two_args, three_args; 7146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arith, logical, compare, ldst; 7147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int integer, floats, p405, altivec, faltivec; 7148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int cr; 7149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} insn_sel_flags_t; 7150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void do_tests ( insn_sel_flags_t seln_flags, 7152530f73578552bc876a51fbf90cb6be29769bb362sewardj char *filter) 7153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 7154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 7155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_loop_t tmpl; 7156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 7157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_loop_t *loop; 7158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_t *tests; 7159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int nb_args, type, family; 7160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, n; 7161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int exact; 7162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exact = check_filter(filter); 7164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj n = 0; 7165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; all_tests[i].name != NULL; i++) { 7166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nb_args = all_tests[i].flags & PPC_NB_ARGS; 7167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Check number of arguments */ 7168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if ((nb_args == 1 && !seln_flags.one_arg) || 7169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (nb_args == 2 && !seln_flags.two_args) || 7170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (nb_args == 3 && !seln_flags.three_args)) 7171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 7172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Check instruction type */ 7173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj type = all_tests[i].flags & PPC_TYPE; 7174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if ((type == PPC_ARITH && !seln_flags.arith) || 7175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (type == PPC_LOGICAL && !seln_flags.logical) || 7176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (type == PPC_COMPARE && !seln_flags.compare) || 7177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (type == PPC_LDST && !seln_flags.ldst)) 7178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 7179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Check instruction family */ 7180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj family = all_tests[i].flags & PPC_FAMILY; 7181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if ((family == PPC_INTEGER && !seln_flags.integer) || 7182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (family == PPC_FLOAT && !seln_flags.floats) || 7183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (family == PPC_405 && !seln_flags.p405) || 7184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (family == PPC_ALTIVEC && !seln_flags.altivec) || 7185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (family == PPC_FALTIVEC && !seln_flags.faltivec)) 7186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 7187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Check flags update */ 7188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (((all_tests[i].flags & PPC_CR) && seln_flags.cr == 0) || 7189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (!(all_tests[i].flags & PPC_CR) && seln_flags.cr == 1)) 7190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 7191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* All passed, do the tests */ 7192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests = all_tests[i].tests; 7193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Select the test loop */ 7194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj switch (family) { 7195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case PPC_INTEGER: 7196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj loop = &int_loops[nb_args - 1]; 7197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case PPC_FLOAT: 7199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 7200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj loop = &float_loops[nb_args - 1]; 7201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 7203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Sorry. " 7204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point instructions tests " 7205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "are disabled on your host\n"); 7206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 7207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case PPC_405: 7209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 7210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpl = &test_ppc405; 7211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj loop = &tmpl; 7212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 7214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Sorry. " 7215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC405 instructions tests are disabled on your host\n"); 7216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 7217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 7218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case PPC_ALTIVEC: 7219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 7220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj loop = &altivec_int_loops[nb_args - 1]; 7221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 7223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Sorry. " 7224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec instructions tests are disabled on your host\n"); 7225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 7226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 7227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case PPC_FALTIVEC: 7228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 7229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj loop = &altivec_float_loops[nb_args - 1]; 7230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 7232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Sorry. " 7233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec float instructions tests " 7234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "are disabled on your host\n"); 7235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 7236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 7237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj default: 7238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("ERROR: unknown insn family %08x\n", family); 7239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 7240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (1 || verbose > 0) 7242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s:\n", all_tests[i].name); 7243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; tests[j].name != NULL; j++) { 7244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (check_name(tests[j].name, filter, exact)) { 7245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose > 1) 7246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("Test instruction %s\n", tests[j].name); 7247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*loop)(tests[j].name, tests[j].func, all_tests[i].flags); 7248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("\n"); 7249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj n++; 7250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 7253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("All done. Tested %d different instructions\n", n); 7255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 7256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void usage (void) 7259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 7260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (USAGE_SIMPLE) 7261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, 7262f811097dbc6be6e2f38b314ea8b41932e82dcbdecerion "jm-insns [-1] [-2] [-3] [-*] [-t <type>] [-f <family>] [-u] " 7263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "[-n <filter>] [-r <test_rigour>] [-h]\n" 7264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-1: test opcodes with one argument\n" 7265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-2: test opcodes with two arguments\n" 7266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-3: test opcodes with three arguments\n" 7267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-*: launch test without checking the number of arguments\n" 7268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-t: launch test for instructions of type <type>\n" 7269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t recognized types:\n" 7270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tarith (or a)\n" 7271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tlogical (or l)\n" 7272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tcompare (or c)\n" 7273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tstoreload (or s)\n" 7274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-f: launch test for instructions of family <family>\n" 7275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t recognized families:\n" 7276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tinteger (or i)\n" 7277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tfloat (or f)\n" 7278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tppc405 (or mac)\n" 7279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\taltivec (or a)\n" 7280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-u: test instructions that update flags\n" 7281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-n: filter instructions with <filter>\n" 7282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t <filter> can be in two forms:\n" 7283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tname : filter functions that exactly match <name>\n" 7284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tname* : filter functions that start with <name>\n" 7285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-r: set size of arg tables to use to define <test_rigour>\n" 7286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t recognized types:\n" 7287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tlarge (or l)\n" 7288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tsmall (or s) - default\n" 7289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-v: verbose (-v -v for more)\n" 7290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-h: print this help\n" 7291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ); 7292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 7293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, 729457c3e5d80627eb327f15e059f85ecef735159ab5cerion "Usage: jm-insns [OPTION]\n" 729557c3e5d80627eb327f15e059f85ecef735159ab5cerion "\t-i: test integer instructions (default)\n" 729657c3e5d80627eb327f15e059f85ecef735159ab5cerion "\t-f: test floating point instructions\n" 729757c3e5d80627eb327f15e059f85ecef735159ab5cerion "\t-a: test altivec instructions\n" 729857c3e5d80627eb327f15e059f85ecef735159ab5cerion "\t-v: be verbose\n" 729957c3e5d80627eb327f15e059f85ecef735159ab5cerion "\t-h: display this help and exit\n" 7300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ); 7301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 7302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 7303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 730457c3e5d80627eb327f15e059f85ecef735159ab5cerion 7305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjint main (int argc, char **argv) 7306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 7307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (USAGE_SIMPLE) 730857c3e5d80627eb327f15e059f85ecef735159ab5cerion//////////////////////////////////////////////////////////////////////// 7309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned char *tmp, *filter = NULL; 7310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj insn_sel_flags_t flags; 7311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int c; 7312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.one_arg = 0; 7314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.two_args = 0; 7315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.three_args = 0; 7316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.arith = 0; 7317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.logical = 0; 7318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.compare = 0; 7319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.ldst = 0; 7320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.integer = 0; 7321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.floats = 0; 7322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.p405 = 0; 7323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.altivec = 0; 7324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.faltivec = 0; 7325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.cr = -1; 7326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj while ((c = getopt(argc, argv, "123t:f:n:r:uvh")) != -1) { 7328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj switch (c) { 7329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case '1': 7330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.one_arg = 1; 7331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case '2': 7333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.two_args = 1; 7334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case '3': 7336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.three_args = 1; 7337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 't': 7339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = optarg; 7340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (strcmp(tmp, "arith") == 0 || strcmp(tmp, "a") == 0) { 7341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.arith = 1; 7342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "logical") == 0 || strcmp(tmp, "l") == 0) { 7343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.logical = 1; 7344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "compare") == 0 || strcmp(tmp, "c") == 0) { 7345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.compare = 1; 7346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "storeload") == 0 || strcmp(tmp, "s") == 0) { 7347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.ldst = 1; 7348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { 7349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj goto bad_arg; 7350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'f': 7353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = optarg; 7354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (strcmp(tmp, "integer") == 0 || strcmp(tmp, "i") == 0) { 7355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.integer = 1; 7356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "float") == 0 || strcmp(tmp, "f") == 0) { 7357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.floats = 1; 7358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "ppc405") == 0 || strcmp(tmp, "mac") == 0) { 7359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.p405 = 1; 7360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "altivec") == 0 || strcmp(tmp, "a") == 0) { 7361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.altivec = 1; 7362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.faltivec = 1; 7363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { 7364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj goto bad_arg; 7365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'n': 7368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj filter = optarg; 7369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'r': 7371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = optarg; 7372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (strcmp(tmp, "large") == 0 || strcmp(tmp, "l") == 0) { 7373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj arg_list_size = 1; 7374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "small") == 0 || strcmp(tmp, "s") == 0) { 7375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj arg_list_size = 0; 7376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { 7377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj goto bad_arg; 7378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'u': 7382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.cr = 1; 7383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'h': 7385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 7386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 0; 7387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'v': 7388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj verbose++; 7389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj default: 7391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 7392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Unknown argument: '%c'\n", c); 7393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 1; 7394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj bad_arg: 7395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 7396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Bad argument for '%c': '%s'\n", c, tmp); 7397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 1; 7398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (argc != optind) { 7401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 7402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Bad number of arguments\n"); 7403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 1; 7404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Default n_args 7407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (flags.one_arg == 0 && flags.two_args == 0 && flags.three_args == 0) { 7408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.one_arg = 1; 7409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.two_args = 1; 7410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.three_args = 1; 7411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Default type 7413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (flags.arith == 0 && flags.logical == 0 && 7414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.compare == 0 && flags.ldst == 0) { 7415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.arith = 1; 7416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.logical = 1; 7417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.compare = 1; 7418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.ldst = 1; 7419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Default family 7421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (flags.integer == 0 && flags.floats == 0 && 7422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.p405 == 0 && flags.altivec == 0 && flags.faltivec == 0) { 7423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.integer = 1; 7424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.floats = 1; 7425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.p405 = 1; 7426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.altivec = 1; 7427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.faltivec = 1; 7428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Default cr update 7430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (flags.cr == -1) 7431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.cr = 2; // both 7432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 743457c3e5d80627eb327f15e059f85ecef735159ab5cerion//////////////////////////////////////////////////////////////////////// 7435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Simple usage: 743657c3e5d80627eb327f15e059f85ecef735159ab5cerion ./jm-insns -i => int insns 743757c3e5d80627eb327f15e059f85ecef735159ab5cerion ./jm-insns -f => fp insns 743857c3e5d80627eb327f15e059f85ecef735159ab5cerion ./jm-insns -a => av insns 7439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 7440530f73578552bc876a51fbf90cb6be29769bb362sewardj char *filter = NULL; 7441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj insn_sel_flags_t flags; 7442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int c; 7443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Args 7445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.one_arg = 1; 7446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.two_args = 1; 7447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.three_args = 1; 7448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Type 7449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.arith = 1; 7450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.logical = 1; 7451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.compare = 1; 7452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.ldst = 1; 7453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Family 745457c3e5d80627eb327f15e059f85ecef735159ab5cerion flags.integer = 0; 7455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.floats = 0; 7456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.p405 = 0; 7457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.altivec = 0; 7458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.faltivec = 0; 7459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Flags 7460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.cr = 2; 7461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 746257c3e5d80627eb327f15e059f85ecef735159ab5cerion while ((c = getopt(argc, argv, "ifahv")) != -1) { 7463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj switch (c) { 746457c3e5d80627eb327f15e059f85ecef735159ab5cerion case 'i': 746557c3e5d80627eb327f15e059f85ecef735159ab5cerion flags.integer = 1; 746657c3e5d80627eb327f15e059f85ecef735159ab5cerion break; 746757c3e5d80627eb327f15e059f85ecef735159ab5cerion case 'f': 746857c3e5d80627eb327f15e059f85ecef735159ab5cerion flags.floats = 1; 746957c3e5d80627eb327f15e059f85ecef735159ab5cerion break; 7470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'a': 7471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.altivec = 1; 747205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion flags.faltivec = 1; 7473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'h': 7475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 7476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 0; 7477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'v': 7478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj verbose++; 7479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 7480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj default: 7481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 7482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Unknown argument: '%c'\n", c); 7483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 1; 7484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj arg_list_size = 0; 7488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 7489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj build_iargs_table(); 7492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj build_fargs_table(); 7493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj build_ii16_table(); 7494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 7495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj build_viargs_table(); 7496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj build_vfargs_table(); 7497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 7498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // dump_iargs(); 7499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // dump_iargs16(); 7500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // dump_vfargs(); 7501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose > 1) { 7503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("\nInstruction Selection:\n"); 7504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" n_args: \n"); 7505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" one_arg = %d\n", flags.one_arg); 7506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" two_args = %d\n", flags.two_args); 7507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" three_args = %d\n", flags.three_args); 7508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" type: \n"); 7509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" arith = %d\n", flags.arith); 7510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" logical = %d\n", flags.logical); 7511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" compare = %d\n", flags.compare); 7512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" ldst = %d\n", flags.ldst); 7513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" family: \n"); 7514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" integer = %d\n", flags.integer); 7515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" floats = %d\n", flags.floats); 7516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" p405 = %d\n", flags.p405); 7517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" altivec = %d\n", flags.altivec); 7518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" faltivec = %d\n", flags.faltivec); 7519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" cr update: \n"); 7520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" cr = %d\n", flags.cr); 7521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("\n"); 7522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" num args: \n"); 7523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" iargs - %d\n", nb_iargs); 7524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" fargs - %d\n", nb_fargs); 7525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 7526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" viargs - %d\n", nb_viargs); 7527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" vfargs - %d\n", nb_vfargs); 7528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 7529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("\n"); 7530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 7531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj do_tests( flags, filter ); 7533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 7534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 0; 7535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 7536