jm-insns.c revision 05cf1ebf06561a8b59adae508e7c4bf6c028ee5b
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/* 51a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Operation details: 52a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 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 * } 96a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 97a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 98a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdint.h> 99a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f14 __asm__ ("f14"); 101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f15 __asm__ ("f15"); 102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f16 __asm__ ("f16"); 103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f17 __asm__ ("f17"); 104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f18 __asm__ ("f18"); 105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r14 __asm__ ("r14"); 106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r15 __asm__ ("r15"); 107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r16 __asm__ ("r16"); 108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r17 __asm__ ("r17"); 109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r18 __asm__ ("r18"); 110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj# include <altivec.h> 113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <assert.h> 115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <ctype.h> 116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <fcntl.h> 117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#include <fenv.h> 118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#include <math.h> 119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdio.h> 120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdlib.h> 121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <string.h> 122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <unistd.h> 123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <malloc.h> 124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- BEGIN #include "test-ppc.h" -------------- */ 126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* 127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * test-ppc.h: 128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * PPC tests for qemu-PPC CPU emulation checks - definitions 129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Copyright (c) 2005 Jocelyn Mayer 131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * This program is free software; you can redistribute it and/or 133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * modify it under the terms of the GNU General Public License V2 134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * as published by the Free Software Foundation 135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * This program is distributed in the hope that it will be useful, 137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * but WITHOUT ANY WARRANTY; without even the implied warranty of 138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * GNU General Public License for more details. 140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * 141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * You should have received a copy of the GNU General Public License 142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * along with this program; if not, write to the Free Software 143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (__TEST_PPC_H__) 147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define __TEST_PPC_H__ 148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdint.h> 150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef void (*test_func_t) (void); 152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct test_t test_t; 153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct test_table_t test_table_t; 154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct test_t { 155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func; 156530f73578552bc876a51fbf90cb6be29769bb362sewardj const char *name; 157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct test_table_t { 160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_t *tests; 161530f73578552bc876a51fbf90cb6be29769bb362sewardj const char *name; 162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t flags; 163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 165530f73578552bc876a51fbf90cb6be29769bb362sewardjtypedef void (*test_loop_t) (const char *name, test_func_t func, 166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t flags); 167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjenum test_flags { 169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Nb arguments */ 170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_ONE_ARG = 0x00000001, 171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_TWO_ARGS = 0x00000002, 172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_THREE_ARGS = 0x00000003, 173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_CMP_ARGS = 0x00000004, // family: compare 174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_CMPI_ARGS = 0x00000005, // family: compare 175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_TWO_I16 = 0x00000006, // family: arith/logical 176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_SPECIAL = 0x00000007, // family: logical 177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_LD_ARGS = 0x00000008, // family: ldst 178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_LDX_ARGS = 0x00000009, // family: ldst 179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_ST_ARGS = 0x0000000A, // family: ldst 180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_STX_ARGS = 0x0000000B, // family: ldst 181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_NB_ARGS = 0x0000000F, 182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Type */ 183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_ARITH = 0x00000100, 184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_LOGICAL = 0x00000200, 185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_COMPARE = 0x00000300, 186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_CROP = 0x00000400, 187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_LDST = 0x00000500, 188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_TYPE = 0x00000F00, 189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Family */ 190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_INTEGER = 0x00010000, 191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_FLOAT = 0x00020000, 192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_405 = 0x00030000, 193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_ALTIVEC = 0x00040000, 194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_FALTIVEC = 0x00050000, 195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_FAMILY = 0x000F0000, 196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Flags: these may be combined, so use separate bitfields. */ 197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_CR = 0x01000000, 198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj PPC_XER_CA = 0x02000000, 199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (__TEST_PPC_H__) */ 202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- END #include "test-ppc.h" -------------- */ 204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define USAGE_SIMPLE 207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#define ALTIVEC_ARGS_LARGE 208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#define DEBUG_ARGS_BUILD 211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (DEBUG_ARGS_BUILD) 212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define AB_DPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0) 213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define AB_DPRINTF(fmt, args...) do { } while (0) 215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#define DEBUG_FILTER 218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (DEBUG_FILTER) 219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define FDPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0) 220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define FDPRINTF(fmt, args...) do { } while (0) 222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define unused __attribute__ (( unused )) 226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- BEGIN #include "ops-ppc.c" -------------- */ 228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* 229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * WARNING: 230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * This file has been auto-generated by './gen-ppc' program 231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Please don't edit by hand 232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* #include "test-ppc.h" */ 236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_add (void) 238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("add 17, 14, 15"); 240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addo (void) 243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addo 17, 14, 15"); 245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addc (void) 248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addc 17, 14, 15"); 250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addco (void) 253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addco 17, 14, 15"); 255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divw (void) 258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divw 17, 14, 15"); 260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwo (void) 263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwo 17, 14, 15"); 265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwu (void) 268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwu 17, 14, 15"); 270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwuo (void) 273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwuo 17, 14, 15"); 275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhw (void) 278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhw 17, 14, 15"); 280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhwu (void) 283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhwu 17, 14, 15"); 285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullw (void) 288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullw 17, 14, 15"); 290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullwo (void) 293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullwo 17, 14, 15"); 295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subf (void) 298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subf 17, 14, 15"); 300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfo (void) 303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfo 17, 14, 15"); 305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfc (void) 308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfc 17, 14, 15"); 310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfco (void) 313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfco 17, 14, 15"); 315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ia_ops_two[] = { 318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_add , " add", }, 319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addo , " addo", }, 320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addc , " addc", }, 321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addco , " addco", }, 322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divw , " divw", }, 323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwo , " divwo", }, 324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwu , " divwu", }, 325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwuo , " divwuo", }, 326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhw , " mulhw", }, 327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhwu , " mulhwu", }, 328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullw , " mullw", }, 329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullwo , " mullwo", }, 330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subf , " subf", }, 331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfo , " subfo", }, 332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfc , " subfc", }, 333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfco , " subfco", }, 334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_add_ (void) 338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("add. 17, 14, 15"); 340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addo_ (void) 343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addo. 17, 14, 15"); 345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addc_ (void) 348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addc. 17, 14, 15"); 350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addco_ (void) 353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addco. 17, 14, 15"); 355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divw_ (void) 358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divw. 17, 14, 15"); 360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwo_ (void) 363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwo. 17, 14, 15"); 365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwu_ (void) 368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwu. 17, 14, 15"); 370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwuo_ (void) 373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("divwuo. 17, 14, 15"); 375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhw_ (void) 378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhw. 17, 14, 15"); 380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhwu_ (void) 383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhwu. 17, 14, 15"); 385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullw_ (void) 388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullw. 17, 14, 15"); 390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullwo_ (void) 393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullwo. 17, 14, 15"); 395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subf_ (void) 398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subf. 17, 14, 15"); 400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfo_ (void) 403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfo. 17, 14, 15"); 405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfc_ (void) 408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfc. 17, 14, 15"); 410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfco_ (void) 413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfco. 17, 14, 15"); 415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iar_ops_two[] = { 418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_add_ , " add.", }, 419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addo_ , " addo.", }, 420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addc_ , " addc.", }, 421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addco_ , " addco.", }, 422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divw_ , " divw.", }, 423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwo_ , " divwo.", }, 424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwu_ , " divwu.", }, 425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_divwuo_ , " divwuo.", }, 426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhw_ , " mulhw.", }, 427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhwu_ , " mulhwu.", }, 428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullw_ , " mullw.", }, 429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullwo_ , " mullwo.", }, 430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subf_ , " subf.", }, 431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfo_ , " subfo.", }, 432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfc_ , " subfc.", }, 433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfco_ , " subfco.", }, 434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_adde (void) 438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("adde 17, 14, 15"); 440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addeo (void) 443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addeo 17, 14, 15"); 445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfe (void) 448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfe 17, 14, 15"); 450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfeo (void) 453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfeo 17, 14, 15"); 455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iac_ops_two[] = { 458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_adde , " adde", }, 459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addeo , " addeo", }, 460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfe , " subfe", }, 461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfeo , " subfeo", }, 462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_adde_ (void) 466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("adde. 17, 14, 15"); 468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addeo_ (void) 471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addeo. 17, 14, 15"); 473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfe_ (void) 476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfe. 17, 14, 15"); 478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfeo_ (void) 481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfeo. 17, 14, 15"); 483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iacr_ops_two[] = { 486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_adde_ , " adde.", }, 487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addeo_ , " addeo.", }, 488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfe_ , " subfe.", }, 489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfeo_ , " subfeo.", }, 490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_and (void) 494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("and 17, 14, 15"); 496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andc (void) 499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("andc 17, 14, 15"); 501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_eqv (void) 504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("eqv 17, 14, 15"); 506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nand (void) 509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nand 17, 14, 15"); 511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nor (void) 514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nor 17, 14, 15"); 516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_or (void) 519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("or 17, 14, 15"); 521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_orc (void) 524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("orc 17, 14, 15"); 526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xor (void) 529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("xor 17, 14, 15"); 531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_slw (void) 534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("slw 17, 14, 15"); 536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sraw (void) 539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("sraw 17, 14, 15"); 541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srw (void) 544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("srw 17, 14, 15"); 546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_two[] = { 549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_and , " and", }, 550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_andc , " andc", }, 551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_eqv , " eqv", }, 552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nand , " nand", }, 553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nor , " nor", }, 554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_or , " or", }, 555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_orc , " orc", }, 556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_xor , " xor", }, 557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_slw , " slw", }, 558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sraw , " sraw", }, 559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_srw , " srw", }, 560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_and_ (void) 564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("and. 17, 14, 15"); 566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andc_ (void) 569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("andc. 17, 14, 15"); 571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_eqv_ (void) 574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("eqv. 17, 14, 15"); 576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nand_ (void) 579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nand. 17, 14, 15"); 581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nor_ (void) 584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nor. 17, 14, 15"); 586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_or_ (void) 589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("or. 17, 14, 15"); 591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_orc_ (void) 594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("orc. 17, 14, 15"); 596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xor_ (void) 599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("xor. 17, 14, 15"); 601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_slw_ (void) 604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("slw. 17, 14, 15"); 606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sraw_ (void) 609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("sraw. 17, 14, 15"); 611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srw_ (void) 614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("srw. 17, 14, 15"); 616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_two[] = { 619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_and_ , " and.", }, 620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_andc_ , " andc.", }, 621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_eqv_ , " eqv.", }, 622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nand_ , " nand.", }, 623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nor_ , " nor.", }, 624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_or_ , " or.", }, 625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_orc_ , " orc.", }, 626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_xor_ , " xor.", }, 627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_slw_ , " slw.", }, 628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sraw_ , " sraw.", }, 629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_srw_ , " srw.", }, 630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cmp (void) 634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("cmp 2, 14, 15"); 636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cmpl (void) 639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("cmpl 2, 14, 15"); 641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_icr_ops_two[] = { 644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_cmp , " cmp", }, 645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_cmpl , " cmpl", }, 646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cmpi (void) 650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("cmpi 2, 14, 15"); 652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cmpli (void) 655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("cmpli 2, 14, 15"); 657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_icr_ops_two_i16[] = { 660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_cmpi , " cmpi", }, 661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_cmpli , " cmpli", }, 662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addi (void) 666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addi 17, 14, 0"); 668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addic (void) 671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addic 17, 14, 0"); 673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addis (void) 676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addis 17, 14, 0"); 678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulli (void) 681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulli 17, 14, 0"); 683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfic (void) 686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfic 17, 14, 0"); 688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ia_ops_two_i16[] = { 691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addi , " addi", }, 692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addic , " addic", }, 693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addis , " addis", }, 694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulli , " mulli", }, 695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfic , " subfic", }, 696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addic_ (void) 700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addic. 17, 14, 0"); 702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iar_ops_two_i16[] = { 705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addic_ , " addic.", }, 706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_ori (void) 710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("ori 17, 14, 0"); 712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_oris (void) 715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("oris 17, 14, 0"); 717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xori (void) 720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("xori 17, 14, 0"); 722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xoris (void) 725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("xoris 17, 14, 0"); 727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_two_i16[] = { 730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_ori , " ori", }, 731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_oris , " oris", }, 732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_xori , " xori", }, 733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_xoris , " xoris", }, 734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andi_ (void) 738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("andi. 17, 14, 0"); 740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andis_ (void) 743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("andis. 17, 14, 0"); 745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_two_i16[] = { 748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_andi_ , " andi.", }, 749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_andis_ , " andis.", }, 750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crand (void) 754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crand 17, 14, 15"); 756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crandc (void) 759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crandc 17, 14, 15"); 761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_creqv (void) 764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("creqv 17, 14, 15"); 766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crnand (void) 769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crnand 17, 14, 15"); 771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crnor (void) 774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crnor 17, 14, 15"); 776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cror (void) 779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("cror 17, 14, 15"); 781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crorc (void) 784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crorc 17, 14, 15"); 786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crxor (void) 789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("crxor 17, 14, 15"); 791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_crl_ops_two[] = { 794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crand , " crand", }, 795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crandc , " crandc", }, 796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_creqv , " creqv", }, 797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crnand , " crnand", }, 798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crnor , " crnor", }, 799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_cror , " cror", }, 800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crorc , " crorc", }, 801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_crxor , " crxor", }, 802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addme (void) 806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addme 17, 14"); 808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addmeo (void) 811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addmeo 17, 14"); 813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addze (void) 816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addze 17, 14"); 818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addzeo (void) 821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addzeo 17, 14"); 823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfme (void) 826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfme 17, 14"); 828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfmeo (void) 831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfmeo 17, 14"); 833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfze (void) 836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfze 17, 14"); 838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfzeo (void) 841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfzeo 17, 14"); 843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iac_ops_one[] = { 846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addme , " addme", }, 847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addmeo , " addmeo", }, 848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addze , " addze", }, 849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addzeo , " addzeo", }, 850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfme , " subfme", }, 851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfmeo , " subfmeo", }, 852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfze , " subfze", }, 853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfzeo , " subfzeo", }, 854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addme_ (void) 858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addme. 17, 14"); 860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addmeo_ (void) 863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addmeo. 17, 14"); 865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addze_ (void) 868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addze. 17, 14"); 870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addzeo_ (void) 873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addzeo. 17, 14"); 875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfme_ (void) 878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfme. 17, 14"); 880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfmeo_ (void) 883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfmeo. 17, 14"); 885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfze_ (void) 888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfze. 17, 14"); 890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfzeo_ (void) 893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("subfzeo. 17, 14"); 895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iacr_ops_one[] = { 898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addme_ , " addme.", }, 899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addmeo_ , " addmeo.", }, 900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addze_ , " addze.", }, 901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_addzeo_ , " addzeo.", }, 902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfme_ , " subfme.", }, 903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfmeo_ , " subfmeo.", }, 904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfze_ , " subfze.", }, 905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_subfzeo_ , " subfzeo.", }, 906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cntlzw (void) 910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("cntlzw 17, 14"); 912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsb (void) 915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("extsb 17, 14"); 917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsh (void) 920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("extsh 17, 14"); 922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_neg (void) 925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("neg 17, 14"); 927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nego (void) 930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nego 17, 14"); 932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_one[] = { 935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_cntlzw , " cntlzw", }, 936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_extsb , " extsb", }, 937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_extsh , " extsh", }, 938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_neg , " neg", }, 939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nego , " nego", }, 940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cntlzw_ (void) 944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("cntlzw. 17, 14"); 946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsb_ (void) 949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("extsb. 17, 14"); 951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsh_ (void) 954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("extsh. 17, 14"); 956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_neg_ (void) 959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("neg. 17, 14"); 961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nego_ (void) 964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nego. 17, 14"); 966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_one[] = { 969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_cntlzw_ , " cntlzw.", }, 970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_extsb_ , " extsb.", }, 971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_extsh_ , " extsh.", }, 972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_neg_ , " neg.", }, 973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nego_ , " nego.", }, 974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwimi (void) 978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("rlwimi 17, 14, 0, 0, 0"); 980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwinm (void) 983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("rlwinm 17, 14, 0, 0, 0"); 985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwnm (void) 988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("rlwnm 17, 14, 15, 0, 0"); 990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srawi (void) 993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("srawi 17, 14, 0"); 995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mfcr (void) 998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 17"); 1000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mfspr (void) 1003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfspr 17, 1"); 1005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mtspr (void) 1008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtspr 1, 14"); 1010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_spe[] = { 1013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwimi , " rlwimi", }, 1014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwinm , " rlwinm", }, 1015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwnm , " rlwnm", }, 1016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_srawi , " srawi", }, 1017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mfcr , " mfcr", }, 1018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mfspr , " mfspr", }, 1019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mtspr , " mtspr", }, 1020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwimi_ (void) 1024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("rlwimi. 17, 14, 0, 0, 0"); 1026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwinm_ (void) 1029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("rlwinm. 17, 14, 0, 0, 0"); 1031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwnm_ (void) 1034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("rlwnm. 17, 14, 15, 0, 0"); 1036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srawi_ (void) 1039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("srawi. 17, 14, 0"); 1041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mcrf (void) 1044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mcrf 0, 0"); 1046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mcrxr (void) 1049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mcrxr 0"); 1051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mtcrf (void) 1054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcrf 0, 14"); 1056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_spe[] = { 1059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwimi_ , " rlwimi.", }, 1060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwinm_ , " rlwinm.", }, 1061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_rlwnm_ , " rlwnm.", }, 1062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_srawi_ , " srawi.", }, 1063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mcrf , " mcrf", }, 1064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mcrxr , " mcrxr", }, 1065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mtcrf , " mtcrf", }, 1066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbz (void) 1070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lbz 17,0(14)"); 1072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzu (void) 1075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lbzu 17,0(14)"); 1077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lha (void) 1080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lha 17,0(14)"); 1082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhau (void) 1085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lhau 17,0(14)"); 1087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhz (void) 1090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lhz 17,0(14)"); 1092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzu (void) 1095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lhzu 17,0(14)"); 1097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwz (void) 1100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lwz 17,0(14)"); 1102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzu (void) 1105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lwzu 17,0(14)"); 1107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ild_ops_two_i16[] = { 1110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lbz , " lbz", }, 1111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lbzu , " lbzu", }, 1112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lha , " lha", }, 1113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhau , " lhau", }, 1114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhz , " lhz", }, 1115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhzu , " lhzu", }, 1116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lwz , " lwz", }, 1117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lwzu , " lwzu", }, 1118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzx (void) 1122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lbzx 17,14,15"); 1124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzux (void) 1127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lbzux 17,14,15"); 1129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhax (void) 1132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lhax 17,14,15"); 1134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhaux (void) 1137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lhaux 17,14,15"); 1139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzx (void) 1142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lhzx 17,14,15"); 1144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzux (void) 1147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lhzux 17,14,15"); 1149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzx (void) 1152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lwzx 17,14,15"); 1154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzux (void) 1157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lwzux 17,14,15"); 1159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ild_ops_two[] = { 1162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lbzx , " lbzx", }, 1163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lbzux , " lbzux", }, 1164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhax , " lhax", }, 1165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhaux , " lhaux", }, 1166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhzx , " lhzx", }, 1167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lhzux , " lhzux", }, 1168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lwzx , " lwzx", }, 1169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_lwzux , " lwzux", }, 1170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stb (void) 1174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stb 14,0(15)"); 1176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbu (void) 1179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stbu 14,0(15)"); 1181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sth (void) 1184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("sth 14,0(15)"); 1186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthu (void) 1189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("sthu 14,0(15)"); 1191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stw (void) 1194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stw 14,0(15)"); 1196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwu (void) 1199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stwu 14,0(15)"); 1201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ist_ops_three_i16[] = { 1204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stb , " stb", }, 1205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stbu , " stbu", }, 1206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sth , " sth", }, 1207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sthu , " sthu", }, 1208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stw , " stw", }, 1209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stwu , " stwu", }, 1210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbx (void) 1214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stbx 14,15,16"); 1216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbux (void) 1219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stbux 14,15,16"); 1221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthx (void) 1224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("sthx 14,15,16"); 1226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthux (void) 1229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("sthux 14,15,16"); 1231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwx (void) 1234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stwx 14,15,16"); 1236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwux (void) 1239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("stwux 14,15,16"); 1241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ist_ops_three[] = { 1244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stbx , " stbx", }, 1245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stbux , " stbux", }, 1246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sthx , " sthx", }, 1247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_sthux , " sthux", }, 1248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stwx , " stwx", }, 1249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_stwux , " stwux", }, 1250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsel (void) 1255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsel 17, 14, 15, 16"); 1257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadd (void) 1260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmadd 17, 14, 15, 16"); 1262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadds (void) 1265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmadds 17, 14, 15, 16"); 1267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsub (void) 1270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmsub 17, 14, 15, 16"); 1272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsubs (void) 1275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmsubs 17, 14, 15, 16"); 1277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadd (void) 1280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmadd 17, 14, 15, 16"); 1282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadds (void) 1285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmadds 17, 14, 15, 16"); 1287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsub (void) 1290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmsub 17, 14, 15, 16"); 1292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsubs (void) 1295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmsubs 17, 14, 15, 16"); 1297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_three[] = { 1300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsel , " fsel", }, 1301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmadd , " fmadd", }, 1302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmadds , " fmadds", }, 1303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmsub , " fmsub", }, 1304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmsubs , " fmsubs", }, 1305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmadd , " fnmadd", }, 1306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmadds , " fnmadds", }, 1307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmsub , " fnmsub", }, 1308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmsubs , " fnmsubs", }, 1309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsel_ (void) 1315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsel. 17, 14, 15, 16"); 1317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadd_ (void) 1320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmadd. 17, 14, 15, 16"); 1322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadds_ (void) 1325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmadds. 17, 14, 15, 16"); 1327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsub_ (void) 1330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmsub. 17, 14, 15, 16"); 1332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsubs_ (void) 1335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmsubs. 17, 14, 15, 16"); 1337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadd_ (void) 1340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmadd. 17, 14, 15, 16"); 1342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadds_ (void) 1345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmadds. 17, 14, 15, 16"); 1347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsub_ (void) 1350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmsub. 17, 14, 15, 16"); 1352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsubs_ (void) 1355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnmsubs. 17, 14, 15, 16"); 1357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_three[] = { 1360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsel_ , " fsel.", }, 1361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmadd_ , " fmadd.", }, 1362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmadds_ , " fmadds.", }, 1363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmsub_ , " fmsub.", }, 1364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmsubs_ , " fmsubs.", }, 1365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmadd_ , " fnmadd.", }, 1366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmadds_ , " fnmadds.", }, 1367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmsub_ , " fnmsub.", }, 1368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnmsubs_ , " fnmsubs.", }, 1369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadd (void) 1375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fadd 17, 14, 15"); 1377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadds (void) 1380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fadds 17, 14, 15"); 1382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsub (void) 1385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsub 17, 14, 15"); 1387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsubs (void) 1390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsubs 17, 14, 15"); 1392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmul (void) 1395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmul 17, 14, 15"); 1397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmuls (void) 1400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmuls 17, 14, 15"); 1402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdiv (void) 1405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fdiv 17, 14, 15"); 1407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdivs (void) 1410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fdivs 17, 14, 15"); 1412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_two[] = { 1415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fadd , " fadd", }, 1416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fadds , " fadds", }, 1417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsub , " fsub", }, 1418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsubs , " fsubs", }, 1419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmul , " fmul", }, 1420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmuls , " fmuls", }, 1421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fdiv , " fdiv", }, 1422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fdivs , " fdivs", }, 1423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadd_ (void) 1429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fadd. 17, 14, 15"); 1431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadds_ (void) 1434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fadds. 17, 14, 15"); 1436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsub_ (void) 1439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsub. 17, 14, 15"); 1441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsubs_ (void) 1444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fsubs. 17, 14, 15"); 1446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmul_ (void) 1449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmul. 17, 14, 15"); 1451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmuls_ (void) 1454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmuls. 17, 14, 15"); 1456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdiv_ (void) 1459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fdiv. 17, 14, 15"); 1461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdivs_ (void) 1464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fdivs. 17, 14, 15"); 1466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_two[] = { 1469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fadd_ , " fadd.", }, 1470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fadds_ , " fadds.", }, 1471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsub_ , " fsub.", }, 1472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fsubs_ , " fsubs.", }, 1473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmul_ , " fmul.", }, 1474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmuls_ , " fmuls.", }, 1475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fdiv_ , " fdiv.", }, 1476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fdivs_ , " fdivs.", }, 1477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fcmpo (void) 1483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fcmpo 2, 14, 15"); 1485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fcmpu (void) 1488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fcmpu 2, 14, 15"); 1490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fcr_ops_two[] = { 1493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fcmpo , " fcmpo", }, 1494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fcmpu , " fcmpu", }, 1495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 150005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 150105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0 // TODO: Not yet supported 1502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fres (void) 1503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fres 17, 14"); 1505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsqrte (void) 1508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("frsqrte 17, 14"); 1510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 151105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif 1512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsp (void) 1514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("frsp 17, 14"); 1516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiw (void) 1519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fctiw 17, 14"); 1521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiwz (void) 1524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fctiwz 17, 14"); 1526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmr (void) 1529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmr 17, 14"); 1531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fneg (void) 1534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fneg 17, 14"); 1536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fabs (void) 1539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fabs 17, 14"); 1541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnabs (void) 1544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnabs 17, 14"); 1546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_one[] = { 154905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // { &test_fres , " fres", }, // TODO: Not yet supported 155005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // { &test_frsqrte , " frsqrte", }, // TODO: Not yet supported 1551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_frsp , " frsp", }, 1552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fctiw , " fctiw", }, 1553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fctiwz , " fctiwz", }, 1554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmr , " fmr", }, 1555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fneg , " fneg", }, 1556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fabs , " fabs", }, 1557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnabs , " fnabs", }, 1558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 156305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 156405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0 // TODO: Not yet supported 1565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fres_ (void) 1566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fres. 17, 14"); 1568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsqrte_ (void) 1571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("frsqrte. 17, 14"); 1573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 157405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif 1575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsp_ (void) 1577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("frsp. 17, 14"); 1579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiw_ (void) 1582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fctiw. 17, 14"); 1584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiwz_ (void) 1587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fctiwz. 17, 14"); 1589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmr_ (void) 1592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fmr. 17, 14"); 1594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fneg_ (void) 1597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fneg. 17, 14"); 1599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fabs_ (void) 1602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fabs. 17, 14"); 1604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnabs_ (void) 1607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("fnabs. 17, 14"); 1609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_one[] = { 161205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // { &test_fres_ , " fres.", }, // TODO: Not yet supported 161305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // { &test_frsqrte_ , " frsqrte.", }, // TODO: Not yet supported 1614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_frsp_ , " frsp.", }, 1615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fctiw_ , " fctiw.", }, 1616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fctiwz_ , " fctiwz.", }, 1617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fmr_ , " fmr.", }, 1618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fneg_ , " fneg.", }, 1619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fabs_ , " fabs.", }, 1620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_fnabs_ , " fnabs.", }, 1621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fl_ops_spe[] = { 1627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 1632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_flr_ops_spe[] = { 1633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 1636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 1638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmhaddshs (void) 1639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmhaddshs 17, 14, 15, 16"); 1641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmhraddshs (void) 1644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmhraddshs 17, 14, 15, 16"); 1646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmladduhm (void) 1649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmladduhm 17, 14, 15, 16"); 1651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumubm (void) 1654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsumubm 17, 14, 15, 16"); 1656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumuhm (void) 1659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsumuhm 17, 14, 15, 16"); 1661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumshs (void) 1664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsumshs 17, 14, 15, 16"); 1666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumuhs (void) 1669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsumuhs 17, 14, 15, 16"); 1671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsummbm (void) 1674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsummbm 17, 14, 15, 16"); 1676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumshm (void) 1679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmsumshm 17, 14, 15, 16"); 1681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_aa_ops_three[] = { 1684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmhaddshs , " vmhaddshs", }, 1685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmhraddshs , " vmhraddshs", }, 1686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmladduhm , " vmladduhm", }, 1687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsumubm , " vmsumubm", }, 1688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsumuhm , " vmsumuhm", }, 1689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsumshs , " vmsumshs", }, 1690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsumuhs , " vmsumuhs", }, 1691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsummbm , " vmsummbm", }, 1692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmsumshm , " vmsumshm", }, 1693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 1696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 1698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vperm (void) 1699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vperm 17, 14, 15, 16"); 1701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsel (void) 1704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsel 17, 14, 15, 16"); 1706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_three[] = { 1709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vperm , " vperm", }, 1710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsel , " vsel", }, 1711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 1712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 1713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 1714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 1716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddubm (void) 1717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddubm 17, 14, 15"); 1719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduhm (void) 1722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vadduhm 17, 14, 15"); 1724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduwm (void) 1727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vadduwm 17, 14, 15"); 1729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddubs (void) 1732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddubs 17, 14, 15"); 1734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduhs (void) 1737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vadduhs 17, 14, 15"); 1739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduws (void) 1742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vadduws 17, 14, 15"); 1744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddsbs (void) 1747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddsbs 17, 14, 15"); 1749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddshs (void) 1752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddshs 17, 14, 15"); 1754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddsws (void) 1757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddsws 17, 14, 15"); 1759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddcuw (void) 1762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddcuw 17, 14, 15"); 1764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsububm (void) 1767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsububm 17, 14, 15"); 1769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuhm (void) 1772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubuhm 17, 14, 15"); 1774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuwm (void) 1777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubuwm 17, 14, 15"); 1779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsububs (void) 1782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsububs 17, 14, 15"); 1784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuhs (void) 1787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubuhs 17, 14, 15"); 1789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuws (void) 1792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubuws 17, 14, 15"); 1794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubsbs (void) 1797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubsbs 17, 14, 15"); 1799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubshs (void) 1802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubshs 17, 14, 15"); 1804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubsws (void) 1807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubsws 17, 14, 15"); 1809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubcuw (void) 1812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubcuw 17, 14, 15"); 1814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuloub (void) 1817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmuloub 17, 14, 15"); 1819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulouh (void) 1822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmulouh 17, 14, 15"); 1824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulosb (void) 1827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmulosb 17, 14, 15"); 1829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulosh (void) 1832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmulosh 17, 14, 15"); 1834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuleub (void) 1837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmuleub 17, 14, 15"); 1839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuleuh (void) 1842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmuleuh 17, 14, 15"); 1844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulesb (void) 1847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmulesb 17, 14, 15"); 1849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulesh (void) 1852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmulesh 17, 14, 15"); 1854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsumsws (void) 1857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsumsws 17, 14, 15"); 1859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum2sws (void) 1862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsum2sws 17, 14, 15"); 1864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4ubs (void) 1867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsum4ubs 17, 14, 15"); 1869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4sbs (void) 1872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsum4sbs 17, 14, 15"); 1874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4shs (void) 1877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsum4shs 17, 14, 15"); 1879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgub (void) 1882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavgub 17, 14, 15"); 1884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavguh (void) 1887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavguh 17, 14, 15"); 1889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavguw (void) 1892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavguw 17, 14, 15"); 1894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsb (void) 1897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavgsb 17, 14, 15"); 1899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsh (void) 1902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavgsh 17, 14, 15"); 1904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsw (void) 1907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vavgsw 17, 14, 15"); 1909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxub (void) 1912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxub 17, 14, 15"); 1914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxuh (void) 1917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxuh 17, 14, 15"); 1919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxuw (void) 1922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxuw 17, 14, 15"); 1924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsb (void) 1927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxsb 17, 14, 15"); 1929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsh (void) 1932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxsh 17, 14, 15"); 1934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsw (void) 1937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxsw 17, 14, 15"); 1939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminub (void) 1942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminub 17, 14, 15"); 1944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminuh (void) 1947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminuh 17, 14, 15"); 1949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminuw (void) 1952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminuw 17, 14, 15"); 1954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsb (void) 1957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminsb 17, 14, 15"); 1959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsh (void) 1962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminsh 17, 14, 15"); 1964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsw (void) 1967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 1968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminsw 17, 14, 15"); 1969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 1970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 1971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_aa_ops_two[] = { 1972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddubm , " vaddubm", }, 1973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vadduhm , " vadduhm", }, 1974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vadduwm , " vadduwm", }, 1975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddubs , " vaddubs", }, 1976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vadduhs , " vadduhs", }, 1977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vadduws , " vadduws", }, 1978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddsbs , " vaddsbs", }, 1979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddshs , " vaddshs", }, 1980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddsws , " vaddsws", }, 1981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddcuw , " vaddcuw", }, 1982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsububm , " vsububm", }, 1983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubuhm , " vsubuhm", }, 1984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubuwm , " vsubuwm", }, 1985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsububs , " vsububs", }, 1986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubuhs , " vsubuhs", }, 1987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubuws , " vsubuws", }, 1988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubsbs , " vsubsbs", }, 1989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubshs , " vsubshs", }, 1990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubsws , " vsubsws", }, 1991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubcuw , " vsubcuw", }, 1992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmuloub , " vmuloub", }, 1993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmulouh , " vmulouh", }, 1994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmulosb , " vmulosb", }, 1995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmulosh , " vmulosh", }, 1996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmuleub , " vmuleub", }, 1997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmuleuh , " vmuleuh", }, 1998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmulesb , " vmulesb", }, 1999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmulesh , " vmulesh", }, 2000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsumsws , " vsumsws", }, 2001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsum2sws , " vsum2sws", }, 2002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsum4ubs , " vsum4ubs", }, 2003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsum4sbs , " vsum4sbs", }, 2004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsum4shs , " vsum4shs", }, 2005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavgub , " vavgub", }, 2006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavguh , " vavguh", }, 2007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavguw , " vavguw", }, 2008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavgsb , " vavgsb", }, 2009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavgsh , " vavgsh", }, 2010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vavgsw , " vavgsw", }, 2011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxub , " vmaxub", }, 2012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxuh , " vmaxuh", }, 2013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxuw , " vmaxuw", }, 2014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxsb , " vmaxsb", }, 2015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxsh , " vmaxsh", }, 2016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxsw , " vmaxsw", }, 2017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminub , " vminub", }, 2018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminuh , " vminuh", }, 2019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminuw , " vminuw", }, 2020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminsb , " vminsb", }, 2021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminsh , " vminsh", }, 2022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminsw , " vminsw", }, 2023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vand (void) 2029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vand 17, 14, 15"); 2031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vor (void) 2034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 17, 14, 15"); 2036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vxor (void) 2039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vxor 17, 14, 15"); 2041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vandc (void) 2044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vandc 17, 14, 15"); 2046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vnor (void) 2049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vnor 17, 14, 15"); 2051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlb (void) 2054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrlb 17, 14, 15"); 2056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlh (void) 2059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrlh 17, 14, 15"); 2061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlw (void) 2064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrlw 17, 14, 15"); 2066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslb (void) 2069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vslb 17, 14, 15"); 2071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslh (void) 2074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vslh 17, 14, 15"); 2076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslw (void) 2079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vslw 17, 14, 15"); 2081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrb (void) 2084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsrb 17, 14, 15"); 2086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrh (void) 2089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsrh 17, 14, 15"); 2091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrw (void) 2094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsrw 17, 14, 15"); 2096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrab (void) 2099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsrab 17, 14, 15"); 2101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrah (void) 2104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsrah 17, 14, 15"); 2106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsraw (void) 2109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsraw 17, 14, 15"); 2111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuhum (void) 2114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkuhum 17, 14, 15"); 2116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuwum (void) 2119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkuwum 17, 14, 15"); 2121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuhus (void) 2124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkuhus 17, 14, 15"); 2126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuwus (void) 2129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkuwus 17, 14, 15"); 2131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkshus (void) 2134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkshus 17, 14, 15"); 2136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkswus (void) 2139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkswus 17, 14, 15"); 2141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkshss (void) 2144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkshss 17, 14, 15"); 2146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkswss (void) 2149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkswss 17, 14, 15"); 2151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkpx (void) 2154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vpkpx 17, 14, 15"); 2156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghb (void) 2159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrghb 17, 14, 15"); 2161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghh (void) 2164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrghh 17, 14, 15"); 2166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghw (void) 2169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrghw 17, 14, 15"); 2171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglb (void) 2174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrglb 17, 14, 15"); 2176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglh (void) 2179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrglh 17, 14, 15"); 2181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglw (void) 2184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmrglw 17, 14, 15"); 2186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslo (void) 2189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vslo 17, 14, 15"); 2191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsro (void) 2194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsro 17, 14, 15"); 2196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_two[] = { 2199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vand , " vand", }, 2200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vor , " vor", }, 2201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vxor , " vxor", }, 2202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vandc , " vandc", }, 2203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vnor , " vnor", }, 2204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vrlb , " vrlb", }, 2205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vrlh , " vrlh", }, 2206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vrlw , " vrlw", }, 2207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vslb , " vslb", }, 2208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vslh , " vslh", }, 2209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vslw , " vslw", }, 2210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsrb , " vsrb", }, 2211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsrh , " vsrh", }, 2212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsrw , " vsrw", }, 2213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsrab , " vsrab", }, 2214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsrah , " vsrah", }, 2215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsraw , " vsraw", }, 2216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkuhum , " vpkuhum", }, 2217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkuwum , " vpkuwum", }, 2218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkuhus , " vpkuhus", }, 2219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkuwus , " vpkuwus", }, 2220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkshus , " vpkshus", }, 2221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkswus , " vpkswus", }, 2222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkshss , " vpkshss", }, 2223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkswss , " vpkswss", }, 2224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vpkpx , " vpkpx", }, 2225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrghb , " vmrghb", }, 2226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrghh , " vmrghh", }, 2227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrghw , " vmrghw", }, 2228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrglb , " vmrglb", }, 2229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrglh , " vmrglh", }, 2230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmrglw , " vmrglw", }, 2231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vslo , " vslo", }, 2232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsro , " vsro", }, 2233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhsb (void) 2239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupkhsb 17, 14"); 2241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhsh (void) 2244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupkhsh 17, 14"); 2246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhpx (void) 2249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupkhpx 17, 14"); 2251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklsb (void) 2254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupklsb 17, 14"); 2256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklsh (void) 2259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupklsh 17, 14"); 2261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklpx (void) 2264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vupklpx 17, 14"); 2266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_one[] = { 2269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupkhsb , " vupkhsb", }, 2270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupkhsh , " vupkhsh", }, 2271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupkhpx , " vupkhpx", }, 2272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupklsb , " vupklsb", }, 2273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupklsh , " vupklsh", }, 2274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vupklpx , " vupklpx", }, 2275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtub (void) 2281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtub 17, 14, 15"); 2283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuh (void) 2286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtuh 17, 14, 15"); 2288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuw (void) 2291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtuw 17, 14, 15"); 2293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsb (void) 2296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsb 17, 14, 15"); 2298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsh (void) 2301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsh 17, 14, 15"); 2303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsw (void) 2306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsw 17, 14, 15"); 2308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequb (void) 2311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequb 17, 14, 15"); 2313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequh (void) 2316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequh 17, 14, 15"); 2318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequw (void) 2321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequw 17, 14, 15"); 2323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ac_ops_two[] = { 2326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtub , " vcmpgtub", }, 2327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtuh , " vcmpgtuh", }, 2328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtuw , " vcmpgtuw", }, 2329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsb , " vcmpgtsb", }, 2330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsh , " vcmpgtsh", }, 2331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsw , " vcmpgtsw", }, 2332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequb , " vcmpequb", }, 2333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequh , " vcmpequh", }, 2334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequw , " vcmpequw", }, 2335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtub_ (void) 2341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtub. 17, 14, 15"); 2343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuh_ (void) 2346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtuh. 17, 14, 15"); 2348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuw_ (void) 2351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtuw. 17, 14, 15"); 2353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsb_ (void) 2356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsb. 17, 14, 15"); 2358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsh_ (void) 2361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsh. 17, 14, 15"); 2363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsw_ (void) 2366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtsw. 17, 14, 15"); 2368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequb_ (void) 2371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequb. 17, 14, 15"); 2373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequh_ (void) 2376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequh. 17, 14, 15"); 2378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequw_ (void) 2381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpequw. 17, 14, 15"); 2383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_acr_ops_two[] = { 2386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtub_ , " vcmpgtub.", }, 2387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtuh_ , " vcmpgtuh.", }, 2388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtuw_ , " vcmpgtuw.", }, 2389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsb_ , " vcmpgtsb.", }, 2390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsh_ , " vcmpgtsh.", }, 2391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtsw_ , " vcmpgtsw.", }, 2392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequb_ , " vcmpequb.", }, 2393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequh_ , " vcmpequh.", }, 2394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpequw_ , " vcmpequw.", }, 2395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsl (void) 2401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsl 17, 14, 15"); 2403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsr (void) 2406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsr 17, 14, 15"); 2408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vspltb (void) 2411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vspltb 17, 14, 0"); 2413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsplth (void) 2416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsplth 17, 14, 0"); 2418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vspltw (void) 2421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vspltw 17, 14, 0"); 2423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vspltisb (void) 2426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vspltisb 17, 0"); 2428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vspltish (void) 2431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vspltish 17, 0"); 2433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vspltisw (void) 2436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vspltisw 17, 0"); 2438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsldoi (void) 2441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsldoi 17, 14, 15, 0"); 2443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 244505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvsl (void) 244605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 244705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvsl 17, 14, 15"); 244805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 244905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 245005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvsr (void) 245105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 245205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvsr 17, 14, 15"); 245305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 245405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 2455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_av_int_ops_spe[] = { 2456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsl , " vsl", }, 2457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsr , " vsr", }, 2458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vspltb , " vspltb", }, 2459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsplth , " vsplth", }, 2460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vspltw , " vspltw", }, 2461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vspltisb , " vspltisb", }, 2462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vspltish , " vspltish", }, 2463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vspltisw , " vspltisw", }, 2464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsldoi , " vsldoi", }, 246505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvsl , " lvsl", }, 246605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvsr , " lvsr", }, 2467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 247205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvebx (void) 247305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 247405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvebx 17,14,15"); 247505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 247605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 247705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvehx (void) 247805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 247905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvehx 17,14,15"); 248005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 248105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 248205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvewx (void) 248305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 248405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvewx 17,14,15"); 248505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 248605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 248705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvx (void) 248805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 248905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("lvx 17,14,15"); 249005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 249105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 249205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic test_t tests_ald_ops_two[] = { 249305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvebx , " lvebx", }, 249405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvehx , " lvehx", }, 249505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvewx , " lvewx", }, 249605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_lvx , " lvx", }, 249705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { NULL, NULL, }, 249805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}; 249905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */ 250005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 250105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC) 250205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvebx (void) 250305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 250405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("stvebx 14,15,16"); 250505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 250605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 250705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvehx (void) 250805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 250905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("stvehx 14,15,16"); 251005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 251105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 251205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvewx (void) 251305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 251405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("stvewx 14,15,16"); 251505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 251605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 251705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvx (void) 251805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 251905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("stvx 14,15,16"); 252005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 252105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 252205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic test_t tests_ast_ops_three[] = { 252305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_stvebx , " stvebx", }, 252405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_stvehx , " stvehx", }, 252505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_stvewx , " stvewx", }, 252605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { &test_stvx , " stvx", }, 252705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { NULL, NULL, }, 252805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}; 252905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */ 253005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 253105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC) 253205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0 2533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaddfp (void) 2534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaddfp 17, 14, 15, 16"); 2536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vnmsubfp (void) 2539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vnmsubfp 17, 14, 15, 16"); 2541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 254205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif 2543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_three[] = { 254505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion// { &test_vmaddfp , " vmaddfp", }, // TODO: Not yet supported 254605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion// { &test_vnmsubfp , " vnmsubfp", }, // TODO: Not yet supported 2547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddfp (void) 2553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vaddfp 17, 14, 15"); 2555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubfp (void) 2558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubfp 17, 14, 15"); 2560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxfp (void) 2563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vmaxfp 17, 14, 15"); 2565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminfp (void) 2568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vminfp 17, 14, 15"); 2570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_two[] = { 2573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vaddfp , " vaddfp", }, 2574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vsubfp , " vsubfp", }, 2575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vmaxfp , " vmaxfp", }, 2576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vminfp , " vminfp", }, 2577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 258205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 258305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0 // TODO: Not yet supported 2584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfin (void) 2585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrfin 17, 14"); 2587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfiz (void) 2590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrfiz 17, 14"); 2592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfip (void) 2595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrfip 17, 14"); 2597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfim (void) 2600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrfim 17, 14"); 2602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 260305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif 2604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrefp (void) 2606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrefp 17, 14"); 2608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrsqrtefp (void) 2611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vrsqrtefp 17, 14"); 2613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 261505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0 // TODO: Not yet supported 2616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vlogefp (void) 2617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vlogefp 17, 14"); 2619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vexptefp (void) 2622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vexptefp 17, 14"); 2624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 262505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif 2626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_one[] = { 2628b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion // { &test_vrfin , " vrfin", }, // TODO: Not yet supported 2629b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion // { &test_vrfiz , " vrfiz", }, // TODO: Not yet supported 2630b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion // { &test_vrfip , " vrfip", }, // TODO: Not yet supported 2631b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion // { &test_vrfim , " vrfim", }, // TODO: Not yet supported 2632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vrefp , " vrefp", }, 2633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vrsqrtefp , " vrsqrtefp", }, 2634b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion // { &test_vlogefp , " vlogefp", }, // TODO: Not yet supported 2635b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion // { &test_vexptefp , " vexptefp", }, // TODO: Not yet supported 2636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtfp (void) 2642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtfp 17, 14, 15"); 2644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpeqfp (void) 2647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpeqfp 17, 14, 15"); 2649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgefp (void) 2652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgefp 17, 14, 15"); 2654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpbfp (void) 2657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpbfp 17, 14, 15"); 2659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afc_ops_two[] = { 2662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtfp , " vcmpgtfp", }, 2663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpeqfp , " vcmpeqfp", }, 2664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgefp , " vcmpgefp", }, 2665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpbfp , " vcmpbfp", }, 2666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 2671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtfp_ (void) 2672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgtfp. 17, 14, 15"); 2674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpeqfp_ (void) 2677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpeqfp. 17, 14, 15"); 2679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgefp_ (void) 2682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpgefp. 17, 14, 15"); 2684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpbfp_ (void) 2687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vcmpbfp. 17, 14, 15"); 2689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afcr_ops_two[] = { 2692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgtfp_ , " vcmpgtfp.", }, 2693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpeqfp_ , " vcmpeqfp.", }, 2694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpgefp_ , " vcmpgefp.", }, 2695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_vcmpbfp_ , " vcmpbfp.", }, 2696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 2699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 2701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchw (void) 2702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchw 17, 14, 15"); 2704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwo (void) 2707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwo 17, 14, 15"); 2709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchws (void) 2712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchws 17, 14, 15"); 2714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwso (void) 2717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwso 17, 14, 15"); 2719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsu (void) 2722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwsu 17, 14, 15"); 2724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsuo (void) 2727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwsuo 17, 14, 15"); 2729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwu (void) 2732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwu 17, 14, 15"); 2734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwuo (void) 2737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwuo 17, 14, 15"); 2739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhw (void) 2742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhw 17, 14, 15"); 2744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwo (void) 2747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwo 17, 14, 15"); 2749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhws (void) 2752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhws 17, 14, 15"); 2754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwso (void) 2757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwso 17, 14, 15"); 2759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsu (void) 2762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwsu 17, 14, 15"); 2764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsuo (void) 2767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwsuo 17, 14, 15"); 2769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwu (void) 2772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwu 17, 14, 15"); 2774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwuo (void) 2777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwuo 17, 14, 15"); 2779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhw (void) 2782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhw 17, 14, 15"); 2784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwo (void) 2787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwo 17, 14, 15"); 2789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhws (void) 2792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhws 17, 14, 15"); 2794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwso (void) 2797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwso 17, 14, 15"); 2799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsu (void) 2802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwsu 17, 14, 15"); 2804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsuo (void) 2807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwsuo 17, 14, 15"); 2809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwu (void) 2812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwu 17, 14, 15"); 2814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwuo (void) 2817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwuo 17, 14, 15"); 2819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchw (void) 2822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulchw 17, 14, 15"); 2824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchwu (void) 2827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulchwu 17, 14, 15"); 2829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhw (void) 2832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhhw 17, 14, 15"); 2834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhwu (void) 2837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhhwu 17, 14, 15"); 2839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhw (void) 2842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullhw 17, 14, 15"); 2844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhwu (void) 2847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullhwu 17, 14, 15"); 2849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchw (void) 2852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchw 17, 14, 15"); 2854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwo (void) 2857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchwo 17, 14, 15"); 2859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchws (void) 2862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchws 17, 14, 15"); 2864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwso (void) 2867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchwso 17, 14, 15"); 2869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhw (void) 2872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhw 17, 14, 15"); 2874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwo (void) 2877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhwo 17, 14, 15"); 2879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhws (void) 2882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhws 17, 14, 15"); 2884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwso (void) 2887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhwso 17, 14, 15"); 2889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhw (void) 2892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhw 17, 14, 15"); 2894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwo (void) 2897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhwo 17, 14, 15"); 2899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhws (void) 2902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhws 17, 14, 15"); 2904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwso (void) 2907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhwso 17, 14, 15"); 2909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_p4m_ops_two[] = { 2912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchw , " macchw", }, 2913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwo , " macchwo", }, 2914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchws , " macchws", }, 2915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwso , " macchwso", }, 2916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwsu , " macchwsu", }, 2917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwsuo , " macchwsuo", }, 2918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwu , " macchwu", }, 2919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwuo , " macchwuo", }, 2920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhw , " machhw", }, 2921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwo , " machhwo", }, 2922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhws , " machhws", }, 2923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwso , " machhwso", }, 2924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwsu , " machhwsu", }, 2925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwsuo , " machhwsuo", }, 2926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwu , " machhwu", }, 2927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwuo , " machhwuo", }, 2928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhw , " maclhw", }, 2929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwo , " maclhwo", }, 2930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhws , " maclhws", }, 2931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwso , " maclhwso", }, 2932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwsu , " maclhwsu", }, 2933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwsuo , " maclhwsuo", }, 2934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwu , " maclhwu", }, 2935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwuo , " maclhwuo", }, 2936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulchw , " mulchw", }, 2937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulchwu , " mulchwu", }, 2938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhhw , " mulhhw", }, 2939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhhwu , " mulhhwu", }, 2940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullhw , " mullhw", }, 2941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullhwu , " mullhwu", }, 2942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchw , " nmacchw", }, 2943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchwo , " nmacchwo", }, 2944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchws , " nmacchws", }, 2945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchwso , " nmacchwso", }, 2946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhw , " nmachhw", }, 2947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhwo , " nmachhwo", }, 2948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhws , " nmachhws", }, 2949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhwso , " nmachhwso", }, 2950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhw , " nmaclhw", }, 2951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhwo , " nmaclhwo", }, 2952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhws , " nmaclhws", }, 2953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhwso , " nmaclhwso", }, 2954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 2955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 2956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 2957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 2959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchw_ (void) 2960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchw. 17, 14, 15"); 2962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwo_ (void) 2965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwo. 17, 14, 15"); 2967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchws_ (void) 2970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchws. 17, 14, 15"); 2972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwso_ (void) 2975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwso. 17, 14, 15"); 2977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsu_ (void) 2980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwsu. 17, 14, 15"); 2982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsuo_ (void) 2985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwsuo. 17, 14, 15"); 2987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwu_ (void) 2990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwu. 17, 14, 15"); 2992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwuo_ (void) 2995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 2996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("macchwuo. 17, 14, 15"); 2997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 2998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 2999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhw_ (void) 3000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhw. 17, 14, 15"); 3002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwo_ (void) 3005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwo. 17, 14, 15"); 3007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhws_ (void) 3010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhws. 17, 14, 15"); 3012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwso_ (void) 3015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwso. 17, 14, 15"); 3017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsu_ (void) 3020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwsu. 17, 14, 15"); 3022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsuo_ (void) 3025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwsuo. 17, 14, 15"); 3027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwu_ (void) 3030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwu. 17, 14, 15"); 3032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwuo_ (void) 3035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("machhwuo. 17, 14, 15"); 3037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhw_ (void) 3040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhw. 17, 14, 15"); 3042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwo_ (void) 3045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwo. 17, 14, 15"); 3047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhws_ (void) 3050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhws. 17, 14, 15"); 3052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwso_ (void) 3055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwso. 17, 14, 15"); 3057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsu_ (void) 3060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwsu. 17, 14, 15"); 3062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsuo_ (void) 3065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwsuo. 17, 14, 15"); 3067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwu_ (void) 3070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwu. 17, 14, 15"); 3072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwuo_ (void) 3075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("maclhwuo. 17, 14, 15"); 3077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchw_ (void) 3080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulchw. 17, 14, 15"); 3082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchwu_ (void) 3085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulchwu. 17, 14, 15"); 3087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhw_ (void) 3090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhhw. 17, 14, 15"); 3092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhwu_ (void) 3095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mulhhwu. 17, 14, 15"); 3097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhw_ (void) 3100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullhw. 17, 14, 15"); 3102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhwu_ (void) 3105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mullhwu. 17, 14, 15"); 3107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchw_ (void) 3110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchw. 17, 14, 15"); 3112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwo_ (void) 3115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchwo. 17, 14, 15"); 3117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchws_ (void) 3120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchws. 17, 14, 15"); 3122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwso_ (void) 3125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmacchwso. 17, 14, 15"); 3127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhw_ (void) 3130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhw. 17, 14, 15"); 3132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwo_ (void) 3135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhwo. 17, 14, 15"); 3137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhws_ (void) 3140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhws. 17, 14, 15"); 3142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwso_ (void) 3145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmachhwso. 17, 14, 15"); 3147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhw_ (void) 3150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhw. 17, 14, 15"); 3152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwo_ (void) 3155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhwo. 17, 14, 15"); 3157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhws_ (void) 3160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhws. 17, 14, 15"); 3162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwso_ (void) 3165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("nmaclhwso. 17, 14, 15"); 3167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_p4mc_ops_two[] = { 3170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchw_ , " macchw.", }, 3171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwo_ , " macchwo.", }, 3172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchws_ , " macchws.", }, 3173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwso_ , " macchwso.", }, 3174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwsu_ , " macchwsu.", }, 3175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwsuo_ , " macchwsuo.", }, 3176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwu_ , " macchwu.", }, 3177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_macchwuo_ , " macchwuo.", }, 3178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhw_ , " machhw.", }, 3179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwo_ , " machhwo.", }, 3180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhws_ , " machhws.", }, 3181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwso_ , " machhwso.", }, 3182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwsu_ , " machhwsu.", }, 3183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwsuo_ , " machhwsuo.", }, 3184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwu_ , " machhwu.", }, 3185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_machhwuo_ , " machhwuo.", }, 3186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhw_ , " maclhw.", }, 3187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwo_ , " maclhwo.", }, 3188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhws_ , " maclhws.", }, 3189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwso_ , " maclhwso.", }, 3190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwsu_ , " maclhwsu.", }, 3191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwsuo_ , " maclhwsuo.", }, 3192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwu_ , " maclhwu.", }, 3193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_maclhwuo_ , " maclhwuo.", }, 3194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulchw_ , " mulchw.", }, 3195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulchwu_ , " mulchwu.", }, 3196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhhw_ , " mulhhw.", }, 3197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mulhhwu_ , " mulhhwu.", }, 3198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullhw_ , " mullhw.", }, 3199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_mullhwu_ , " mullhwu.", }, 3200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchw_ , " nmacchw.", }, 3201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchwo_ , " nmacchwo.", }, 3202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchws_ , " nmacchws.", }, 3203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmacchwso_ , " nmacchwso.", }, 3204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhw_ , " nmachhw.", }, 3205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhwo_ , " nmachhwo.", }, 3206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhws_ , " nmachhws.", }, 3207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmachhwso_ , " nmachhwso.", }, 3208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhw_ , " nmaclhw.", }, 3209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhwo_ , " nmaclhwo.", }, 3210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhws_ , " nmaclhws.", }, 3211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { &test_nmaclhwso_ , " nmaclhwso.", }, 3212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, }, 3213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 3214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 3215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_table_t all_tests[] = { 3217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ia_ops_two , 3219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with two args", 3220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010102, 3221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iar_ops_two , 3224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with two args with flags update", 3225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010102, 3226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iac_ops_two , 3229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with two args and carry", 3230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x02010102, 3231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iacr_ops_two , 3234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with two args and carry with flags update", 3235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x03010102, 3236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_il_ops_two , 3239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns with two args", 3240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010202, 3241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ilr_ops_two , 3244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns with two args with flags update", 3245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010202, 3246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_icr_ops_two , 3249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer compare insns (two args)", 3250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010304, 3251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_icr_ops_two_i16 , 3254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer compare with immediate insns (two args)", 3255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010305, 3256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ia_ops_two_i16 , 3259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns\n with one register + one 16 bits immediate args", 3260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010106, 3261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iar_ops_two_i16 , 3264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns\n with one register + one 16 bits immediate args with flags update", 3265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010106, 3266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_il_ops_two_i16 , 3269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns\n with one register + one 16 bits immediate args", 3270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010206, 3271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ilr_ops_two_i16 , 3274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns\n with one register + one 16 bits immediate args with flags update", 3275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010206, 3276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_crl_ops_two , 3279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC condition register logical insns - two operands", 3280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010202, 3281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iac_ops_one , 3284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with one arg and carry", 3285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x02010101, 3286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_iacr_ops_one , 3289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer arith insns with one arg and carry with flags update", 3290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x03010101, 3291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_il_ops_one , 3294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns with one arg", 3295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010201, 3296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ilr_ops_one , 3299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer logical insns with one arg with flags update", 3300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010201, 3301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_il_ops_spe , 3304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC logical insns with special forms", 3305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010207, 3306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ilr_ops_spe , 3309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC logical insns with special forms with flags update", 3310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01010207, 3311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ild_ops_two_i16 , 3314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer load insns\n with one register + one 16 bits immediate args with flags update", 3315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010508, 3316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ild_ops_two , 3319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer load insns with two register args", 3320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00010509, 3321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ist_ops_three_i16, 3324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer store insns\n with one register + one 16 bits immediate args with flags update", 3325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x0001050a, 3326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ist_ops_three , 3329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC integer store insns with three register args", 3330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x0001050b, 3331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_fa_ops_three , 3335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns with three args", 3336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00020103, 3337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_far_ops_three , 3342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns\n with three args with flags update", 3343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01020103, 3344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_fa_ops_two , 3349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns with two args", 3350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00020102, 3351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_far_ops_two , 3356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns\n with two args with flags update", 3357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01020102, 3358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_fcr_ops_two , 3363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point compare insns (two args)", 3364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01020304, 3365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_fa_ops_one , 3370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns with one arg", 3371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00020101, 3372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_far_ops_one , 3377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point arith insns\n with one arg with flags update", 3378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01020101, 3379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_fl_ops_spe , 3384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point status register manipulation insns", 3385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00020207, 3386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 3389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_flr_ops_spe , 3391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point status register manipulation insns\n with flags update", 3392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01020207, 3393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 3395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_aa_ops_three , 3398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC altivec integer arith insns with three args", 3399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040103, 3400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_al_ops_three , 3405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC altivec integer logical insns with three args", 3406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040203, 3407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_aa_ops_two , 3412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC altivec integer arith insns with two args", 3413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040102, 3414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_al_ops_two , 3419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC altivec integer logical insns with two args", 3420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040202, 3421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_al_ops_one , 3426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC altivec integer logical insns with one arg", 3427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040201, 3428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_ac_ops_two , 3433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec integer compare insns", 3434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040302, 3435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_acr_ops_two , 3440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec integer compare insns with flags update", 3441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01040302, 3442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_av_int_ops_spe , 3447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec integer special insns", 3448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00040207, 3449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 345305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion tests_ald_ops_two , 345405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion "Altivec load insns with two register args", 345505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 0x00040509, 345605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion }, 345705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */ 345805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC) 345905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { 346005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion tests_ast_ops_three , 346105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion "Altivec store insns with three register args", 346205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 0x0004050b, 346305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion }, 346405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */ 346505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC) 346605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { 3467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_afa_ops_three , 3468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec floating point arith insns with three args", 3469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00050103, 3470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_afa_ops_two , 3475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec floating point arith insns with two args", 3476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00050102, 3477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_afa_ops_one , 3482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec floating point arith insns with one arg", 3483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00050101, 3484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_afc_ops_two , 3489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec floating point compare insns", 3490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00050302, 3491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_afcr_ops_two , 3496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec floating point compare insns with flags update", 3497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01050302, 3498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 3500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 3501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_p4m_ops_two , 3503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC 405 mac insns with three args", 3504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x00030102, 3505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 3507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 3508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 3509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests_p4mc_ops_two , 3510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC 405 mac insns with three args with flags update", 3511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 0x01030102, 3512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 3513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 3514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { NULL, NULL, 0x00000000, }, 3515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 3516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- END #include "ops-ppc.c" -------------- */ 3518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int verbose = 0; 3520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int arg_list_size = 0; 3521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic double *fargs; 3523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_fargs; 3524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic uint32_t *iargs; 3525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_iargs; 3526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic uint16_t *ii16; 3527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_ii16; 3528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic vector unsigned int* viargs; 3530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_viargs; 3531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic vector float* vfargs; 3532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_vfargs; 3533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#define TEST_VSCR_SAT 3535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 3536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void register_farg (void *farg, 3538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int s, uint16_t exp, uint64_t mant) 3539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t tmp; 3541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = ((uint64_t)s << 63) | ((uint64_t)exp << 52) | mant; 3543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *(uint64_t *)farg = tmp; 3544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("%d %03x %013llx => %016llx %0e\n", 3545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s, exp, mant, *(uint64_t *)farg, *(double *)farg); 3546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_fargs_table (void) 3549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Sign goes from zero to one 3551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Exponent goes from 0 to ((1 << 12) - 1) 3552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Mantissa goes from 1 to ((1 << 52) - 1) 3553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * + special values: 3554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * +0.0 : 0 0x000 0x0000000000000 3555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * -0.0 : 1 0x000 0x0000000000000 3556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * +infinity : 0 0x7FF 0x0000000000000 3557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * -infinity : 1 0x7FF 0x0000000000000 3558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * +SNaN : 0 0x7FF 0x7FFFFFFFFFFFF 3559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * -SNaN : 1 0x7FF 0x7FFFFFFFFFFFF 3560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * +QNaN : 0 0x7FF 0x8000000000000 3561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * -QNaN : 1 0x7FF 0x8000000000000 3562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * (8 values) 3563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 3564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t mant; 3565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint16_t exp, e0, e1; 3566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int s; 3567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i=0; 3568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if ( arg_list_size == 1 ) { // Large 3570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fargs = malloc(200 * sizeof(double)); 3571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (s=0; s<2; s++) { 3572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (e0=0; e0<2; e0++) { 3573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (e1=0x000; ; e1 = ((e1 + 1) << 2) + 6) { 3574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (e1 >= 0x400) 3575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj e1 = 0x3fe; 3576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = (e0 << 10) | e1; 3577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (mant = 0x0000000000001ULL; mant < (1ULL << 52); 3578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Add 'random' bits */ 3579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = ((mant + 0x4A6) << 13) + 0x359) { 3580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_farg(&fargs[i++], s, exp, mant); 3581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (e1 == 0x3fe) 3583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { // Default 3588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fargs = malloc(16 * sizeof(double)); 3589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (s=0; s<2; s++) { // x2 3590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// for (e0=0; e0<2; e0++) { 3591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (e1=0x001; ; e1 = ((e1 + 1) << 13) + 7) { // x2 3592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// for (e1=0x000; ; e1 = ((e1 + 1) << 5) + 7) { // x3 3593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (e1 >= 0x400) 3594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj e1 = 0x3fe; 3595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// exp = (e0 << 10) | e1; 3596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = e1; 3597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (mant = 0x0000000000001ULL; mant < (1ULL << 52); 3598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Add 'random' bits */ 3599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = ((mant + 0x4A6) << 29) + 0x359) { // x2 3600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_farg(&fargs[i++], s, exp, mant); 3601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (e1 == 0x3fe) 3603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// } 3606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Special values */ 3610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +0.0 : 0 0x000 0x0000000000000 */ 3611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 3612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0x000; 3613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x0000000000000ULL; 3614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_farg(&fargs[i++], s, exp, mant); 3615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -0.0 : 1 0x000 0x0000000000000 */ 3616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 3617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0x000; 3618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x0000000000000ULL; 3619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_farg(&fargs[i++], s, exp, mant); 3620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +infinity : 0 0x7FF 0x0000000000000 */ 3621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 3622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0x7FF; 3623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x0000000000000ULL; 3624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_farg(&fargs[i++], s, exp, mant); 3625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -infinity : 1 0x7FF 0x0000000000000 */ 3626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 3627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0x7FF; 3628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x0000000000000ULL; 3629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_farg(&fargs[i++], s, exp, mant); 3630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +SNaN : 0 0x7FF 0x7FFFFFFFFFFFF */ 3631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 3632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0x7FF; 3633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x7FFFFFFFFFFFFULL; 3634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_farg(&fargs[i++], s, exp, mant); 3635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -SNaN : 1 0x7FF 0x7FFFFFFFFFFFF */ 3636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 3637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0x7FF; 3638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x7FFFFFFFFFFFFULL; 3639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_farg(&fargs[i++], s, exp, mant); 3640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +QNaN : 0 0x7FF 0x8000000000000 */ 3641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 3642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0x7FF; 3643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x8000000000000ULL; 3644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_farg(&fargs[i++], s, exp, mant); 3645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -QNaN : 1 0x7FF 0x8000000000000 */ 3646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 3647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0x7FF; 3648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x8000000000000ULL; 3649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_farg(&fargs[i++], s, exp, mant); 3650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("Registered %d fargs values\n", i); 3651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nb_fargs = i; 3652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_iargs_table (void) 3655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t tmp; 3657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i=0; 3658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (arg_list_size == 1) { // Large 3660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs = malloc(400 * sizeof(uint32_t)); 3661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (tmp=0; ; tmp = tmp + 1 + (tmp >> 1)) { 3662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp >= 0x100000000ULL) 3663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = 0xFFFFFFFF; 3664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs[i++] = tmp; 3665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("val %08llx\n", tmp); 3666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp == 0xFFFFFFFF) 3667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { // Default 3670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs = malloc(10 * sizeof(uint32_t)); 3671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // for (tmp = 0; ; tmp = 71*tmp + 1 + (tmp>>1)) { // gives 8 3672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // for (tmp = 0; ; tmp = 100000*tmp + 1 + (tmp>>1)) { // gives 4 3673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (tmp=0; ; tmp = 999999*tmp + 999999) { // gives 3 3674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp >= 0x100000000ULL) 3675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = 0xFFFFFFFF; 3676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs[i++] = tmp; 3677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("val %08llx\n", tmp); 3678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp == 0xFFFFFFFF) 3679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("Registered %d iargs values\n", i); 3683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nb_iargs = i; 3684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_ii16_table (void) 3687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t tmp; 3689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i=0; 3690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (arg_list_size == 1) { // Large 3692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ii16 = malloc(200 * sizeof(uint32_t)); 3693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (tmp=0; ; tmp = tmp + 1 + (tmp >> 2)) { 3694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp >= 0x10000) 3695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = 0xFFFF; 3696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ii16[i++] = tmp; 3697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("val %08x\n", tmp); 3698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp == 0xFFFF) 3699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { // Default 3702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ii16 = malloc(10 * sizeof(uint32_t)); 3703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (tmp=0; ; tmp = 999*tmp + 999) { // gives 3 3704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp >= 0x10000) 3705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = 0xFFFF; 3706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ii16[i++] = tmp; 3707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("val %08x\n", tmp); 3708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (tmp == 0xFFFF) 3709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 3710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("Registered %d ii16 values\n", i); 3713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nb_ii16 = i; 3714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 3717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_viargs_table (void) 3718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int i=0; 3720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (ALTIVEC_ARGS_LARGE) 3722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj i=2; 3723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj viargs = memalign(16, i * sizeof(vector unsigned int)); 3724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj viargs[0] = (vector unsigned int) { 0x01020304,0x05060708,0x090A0B0C,0x0E0D0E0F }; 3725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj viargs[1] = (vector unsigned int) { 0xF1F2F3F4,0xF5F6F7F8,0xF9FAFBFC,0xFEFDFEFF }; 3726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 3727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // build from iargs table (large/default already set) 3728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj viargs = malloc(nb_iargs * sizeof(vector unsigned int)); 3729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 3730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int j = iargs[i]; 3731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj viargs[i] = (vector unsigned int){ j, j*2, j*3, j*4 }; 3732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 3734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("Registered %d viargs values\n", i); 3735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nb_viargs = i; 3736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void register_vfarg (vector float* vfarg, 3739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int s, uint8_t exp, uint32_t mant) 3740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t tmp; 3742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = ((uint64_t)s << 31) | ((uint64_t)exp << 23) | mant; 3744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj float f = *(float*)&tmp; 3745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *vfarg = (vector float){ f,f,f,f }; 3746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("%d %02x %06x => %08x %0e\n", 3747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s, exp, mant, *((uint32_t*)&tmp), f); 3748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_vfargs_table (void) 3751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Sign goes from zero to one 3753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Exponent goes from 0 to ((1 << 9) - 1) 3754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Mantissa goes from 1 to ((1 << 24) - 1) 3755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * + special values: 3756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * +0.0 : 0 0x00 0x00000000 3757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * -0.0 : 1 0x00 0x00000000 3758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * +infinity : 0 0xFF 0x00000000 3759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * -infinity : 1 0xFF 0x00000000 3760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * +SNaN : 0 0xFF 0x7FFFFFFF 3761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * -SNaN : 1 0xFF 0x7FFFFFFF 3762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * +QNaN : 0 0xFF 0x80000000 3763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * -QNaN : 1 0xFF 0x80000000 3764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * (8 values) 3765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 3766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t mant; 376705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion uint16_t exp; 3768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int s; 3769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i=0; 3770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 377205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if !defined (ALTIVEC_ARGS_LARGE) 377305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion nb_vfargs = 12; 3774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vfargs = memalign(16, nb_vfargs * sizeof(vector float)); 3775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 377605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // 4 values: 377705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (s=0; s<2; s++) { 377805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (exp=0x5; ; exp += 0x9D ) { 377905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion if (exp > 0xDF) 378005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion break; 378105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (mant = 0x3FFFFF; mant < 0x7FFFFF; 378205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion mant = /* random */ ((mant + 0x1A6) << 31) + 0x159) { 378305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion register_vfarg(&vfargs[i++], s, (uint8_t)exp, mant); 378405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 378505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 378605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 378705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#else 378805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion nb_vfargs = 50; 378905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion vfargs = memalign(16, nb_vfargs * sizeof(vector float)); 379005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 379105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (s=0; s<2; s++) { 379205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (exp=0x0; ; exp += 0x3F ) { 379305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // for (exp=0; ; exp = ((exp + 1) << 1) + 3) { 379405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion if (exp >= 0xFE) 379505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion exp = 0xFE; 379605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (mant = 0x0; mant < 0x7FFFFF; 379705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion mant = /* random */ ((mant + 0x4A6) << 5) + 0x359) { 379805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion register_vfarg(&vfargs[i++], s, (uint8_t)exp, mant); 379905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 380005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion if (exp >= 0xFE) 380105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion break; 380205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 380305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 380405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif 380505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 3806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Special values */ 3807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +0.0 : 0 0x00 0x000000 */ 3808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 3809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0x00; 3810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x000000; 3811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_vfarg(&vfargs[i++], s, exp, mant); 3812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -0.0 : 1 0x00 0x000000 */ 3813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 3814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0x00; 3815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x000000; 3816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_vfarg(&vfargs[i++], s, exp, mant); 3817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +infinity : 0 0xFF 0x000000 */ 3819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 3820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0xFF; 3821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x000000; 3822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_vfarg(&vfargs[i++], s, exp, mant); 3823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -infinity : 1 0xFF 0x000000 */ 3824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 3825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0xFF; 3826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x000000; 3827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_vfarg(&vfargs[i++], s, exp, mant); 3828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* NaN: exponent all 1s, non-zero fraction */ 3830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* SNaN is a NaN with the most significant fraction bit clear.*/ 3831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +SNaN : 0 0xFF 0x3FFFFF */ 3832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 3833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0xFF; 3834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x3FFFFF; 3835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_vfarg(&vfargs[i++], s, exp, mant); 3836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -SNaN : 1 0xFF 0x3FFFFF */ 3837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 3838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0xFF; 3839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x3FFFFF; 3840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_vfarg(&vfargs[i++], s, exp, mant); 3841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* QNaN is a NaN with the most significant fraction bit set */ 3843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* +QNaN : 0 0xFF 0x400000 */ 3844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 0; 3845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0xFF; 3846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x400000; 3847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_vfarg(&vfargs[i++], s, exp, mant); 3848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* -QNaN : 1 0xFF 0x400000 */ 3849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj s = 1; 3850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exp = 0xFF; 3851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj mant = 0x400000; 3852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj register_vfarg(&vfargs[i++], s, exp, mant); 3853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj AB_DPRINTF("Registered %d vfargs values\n", i); 3854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 385505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion assert(i <= nb_vfargs); 385605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion nb_vfargs = i; 3857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 3859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 3861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_iargs (void) 3862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 3864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i = 0; i < nb_iargs; i++) { 3865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("iarg %d: %08x %08x %08x\n", i, iargs[i], 3866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (unsigned int)&iargs[i], (unsigned int)iargs); 3867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_iargs16 (void) 3871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 3873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i = 0; i < nb_ii16; i++) { 3874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("iarg16 %d: %08x %08x %08x\n", i, ii16[i], 3875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (unsigned int)&ii16[i], (unsigned int)ii16); 3876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_vfargs (void) 3880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i=0; 3882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_vfargs; i++) { 3883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector float vf = (vector float)vfargs[i]; 3884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj float f = ((float*)&vf)[0]; 3885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("vfarg %3d: %24f : %08x\n", i, f, ((unsigned int*)&f)[0]); 3886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 3889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3890530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_three_args (const char* name, test_func_t func, 3891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 3892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 3894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k; 3895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 3897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_iargs; j++) { 3898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 3899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 3900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = iargs[j]; 3901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r16 = iargs[k]; 3902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 3903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 3904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 3905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 3906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 3907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 3908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 3909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 3910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 3911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 3912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 3913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 3914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 3915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 3916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 3917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 3918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 3919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 3920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 3921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 3922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n", 3923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], iargs[j], iargs[k], res, flags, xer); 3924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 3926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3930530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_two_args (const char* name, test_func_t func, 3931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t test_flags) 3932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, xer_orig, tmpcr, tmpxer; 3934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 3935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer_orig = 0x00000000; 3937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj redo: 3938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 3939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_iargs; j++) { 3940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 3941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = iargs[j]; 3942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 3943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 3944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 3945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 3946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 3947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 3948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 3949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 3950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = xer_orig; 3951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 3952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 3953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 3954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 3955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 3956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 3957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 3958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 3959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 3960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 3961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 3962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 3963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %08x => %08x (%08x %08x)\n", 3964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], iargs[j], res, flags, xer); 3965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 3967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (test_flags & PPC_XER_CA && xer_orig == 0x00000000) { 3969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer_orig = 0x20000000; 3970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj goto redo; 3971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 3972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 3973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3974530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_one_arg (const char* name, test_func_t func, 3975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t test_flags) 3976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 3977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, xer_orig, tmpcr, tmpxer; 3978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 3979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 3980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer_orig = 0x00000000; 3981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj redo: 3982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 3983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 3984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 3985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 3986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 3987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 3988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 3989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 3990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 3991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 3992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = xer_orig; 3993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 3994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 3995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 3996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 3997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 3998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 3999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x => %08x (%08x %08x)\n", 4006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], res, flags, xer); 4007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (test_flags & PPC_XER_CA && xer_orig == 0x00000000) { 4009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer_orig = 0x20000000; 4010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj goto redo; 4011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void invalidate_icache ( void *ptr, int nbytes ) 4015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int startaddr = (unsigned int) ptr; 4017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int endaddr = startaddr + nbytes; 4018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int cls = 32; /*VG_(cache_line_size_ppc32);*/ 4019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int addr; 4020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj startaddr &= ~(cls - 1); 4022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (addr = startaddr; addr < endaddr; addr += cls) 4023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj asm volatile("dcbst 0,%0" : : "r" (addr)); 4024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj asm volatile("sync"); 4025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (addr = startaddr; addr < endaddr; addr += cls) 4026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj asm volatile("icbi 0,%0" : : "r" (addr)); 4027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj asm volatile("sync; isync"); 4028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* for god knows what reason, if this isn't inlined, the 4031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj program segfaults. */ 4032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void _patch_op_imm (void *out, void *in, 4033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint16_t imm, int sh, int len) 4034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t *p, *q; 4036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = out; 4038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj q = in; 4039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *p = (*q & ~(((1 << len) - 1) << sh)) | ((imm & ((1 << len) - 1)) << sh); 4040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void patch_op_imm (void *out, void *in, 4043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint16_t imm, int sh, int len) 4044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t *p; 4046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = out; 4048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj _patch_op_imm(out, in, imm, sh, len); 4049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj invalidate_icache(out, 4); 4050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void patch_op_imm16 (void *out, void *in, uint16_t imm) 4053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(out, in, imm, 0, 16); 4055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4057530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_one_reg_imm16 (const char* name, 4058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func, 4059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 4064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_ii16; j++) { 4067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("copy func %s from %p to %p (%08x %08x)\n", 4070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, func, func_buf, p[0], p[1]); 4071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm16(func_buf, p, ii16[j]); 4074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" => func %s from %p to %p (%08x %08x)\n", 4077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, func, func_buf, func_buf[0], func_buf[1]); 4078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %08x => %08x (%08x %08x)\n", 4101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], ii16[j], res, flags, xer); 4102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Special test cases for: 4108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwimi 4109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwinm 4110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwnm 4111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * srawi 4112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrf 4113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrfs 4114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrxr_cb 4115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mfcr_cb 4116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mfspr_cb 4117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mftb_cb 4118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtcrf_cb 4119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtspr_cb 4120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 4121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4122530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void rlwi_cb (const char* name, test_func_t func, 4123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k, l; 4128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = (arg_list_size == 0) ? 31 : 3; 4130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<32; j+=arg_step) { 4133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<32; k+=arg_step) { 4134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (l=0; l<32; l+=arg_step) { 4135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj _patch_op_imm(func_buf, p, j, 11, 5); 4138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj _patch_op_imm(func_buf, p, k, 6, 5); 4139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, l, 1, 5); 4140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %d, %d, %d => %08x (%08x %08x)\n", 4163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], j, k, l, res, flags, xer); 4164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4171530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void rlwnm_cb (const char* name, test_func_t func, 4172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k, l; 4177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = (arg_list_size == 0) ? 31 : 3; 4179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_iargs; j++) { 4182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<32; k+=arg_step) { 4183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (l=0; l<32; l+=arg_step) { 4184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj _patch_op_imm(func_buf, p, k, 6, 5); 4187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, l, 1, 5); 4188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = iargs[j]; 4191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %08x, %d, %d => %08x (%08x %08x)\n", 4212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], iargs[j], k, l, res, flags, xer); 4213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4220530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void srawi_cb (const char* name, test_func_t func, 4221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 4226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = (arg_list_size == 0) ? 31 : 1; 4228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<32; j+=arg_step) { 4231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, j, 11, 5); 4234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %d => %08x (%08x %08x)\n", 4257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], j, res, flags, xer); 4258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4263530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mcrf_cb (const char* name, test_func_t func, 4264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, xer, tmpcr, tmpxer; 4268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k; 4269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = (arg_list_size == 0) ? 7 : 1; 4271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<8; j+=arg_step) { 4274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<8; k+=arg_step) { 4275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj _patch_op_imm(func_buf, p, j, 23, 3); 4278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, k, 18, 3); 4279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 14"); 4289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, %d (%08x) => (%08x %08x)\n", 4301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, k, iargs[i], flags, xer); 4302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4309530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mcrfs_cb (const char* name, test_func_t func, 4310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{} 4312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4315530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mcrxr_cb (const char* name, test_func_t func, 4316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, xer, tmpcr, tmpxer; 4320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k; 4321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = 1; //(arg_list_size == 0) ? 7 : 1; 4323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<16; i+=arg_step) { 4325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i << 28; 4326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<8; k+=arg_step) { 4327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, k, 23, 3); 4330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = j; 4332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 14"); 4341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d (%08x) => (%08x %08x)\n", 4352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, k, j, flags, xer); 4353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4358530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mfcr_cb (const char* name, test_func_t func, 4359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 4363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 14"); 4374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s (%08x) => %08x (%08x %08x)\n", 4387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], res, flags, xer); 4388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// NOTE: Not using func: calling function kills lr 4392530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mfspr_cb (const char* name, test_func_t func, 4393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, ctr, lr, tmpcr, tmpxer; 4396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int j, k; 4397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Call func, just to stop compiler complaining 4399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mfxer 4402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 1; 4403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Only valid bits of xer: 0xE000007F 4414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lis 15,0xE000"); 4415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addi 15,15,0x007F"); 4416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("and 16,15,14"); 4417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 16"); 4420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 18"); 4421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 18"); 4422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfspr 17, 1"); // func() 4424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 4430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 4431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 18"); 4432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r18; 4433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n", 4442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[k], res, flags, xer, lr, ctr); 4443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mflr 4447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 8; 4448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 14"); 4461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 18"); 4462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfspr 17, 8"); // func() 4465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 4471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 4472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 18"); 4473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r18; 4474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n", 4483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[k], res, flags, xer, lr, ctr); 4484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mfctr 4488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 9; 4489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 14"); 4502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 18"); 4504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfspr 17, 9"); // func() 4506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 4512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 4513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 18"); 4514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r18; 4515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n", 4524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, 9, iargs[k], res, flags, xer, lr, ctr); 4525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4529530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mftb_cb (const char* name, test_func_t func, 4530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// How to test this? 4533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// 1) TBU won't change for a while 4534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// 2) TBL will have changed every loop iter 4535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 4537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 4538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj i = 269; 4540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<16; j++) { 4541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mftb 17, 269"); // func 4552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d => %08x (%08x %08x)\n", 4564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, i, res, flags, xer); 4565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj i = 268; 4569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<16; j++) { 4570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mftb 17, 268"); // func 4581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d => %08x (%08x %08x)\n", 4593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, i, res, flags, xer); 4594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4598530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mtcrf_cb (const char* name, test_func_t func, 4599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, xer, tmpcr, tmpxer; 4603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 4604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arg_step = (arg_list_size == 0) ? 99 : 1; 4606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<256; j+=arg_step) { 4609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, j, 12, 8); 4612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 4614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, %08x => (%08x %08x)\n", 4634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[i], flags, xer); 4635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// NOTE: Not using func: calling function kills lr 4641530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mtspr_cb (const char* name, test_func_t func, 4642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, xer, ctr, lr, tmpcr, tmpxer; 4645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int j, k; 4646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Call func, just to stop compiler complaining 4648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mtxer 4651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 1; 4652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Only valid bits of xer: 0xE000007F 4665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // VEX masks these (maybe it shouldn't?), so let's do it first: 4666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("lis 15,0xE000"); 4667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("addi 15,15,0x007F"); 4668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("and 16,15,14"); 4669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 18"); 4673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 18"); 4674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 16"); // func() 4676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 4682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 4683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 18"); 4684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r18; 4685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n", 4693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[k], flags, xer, lr, ctr); 4694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mtlr 4698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 8; 4699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0x0; 4710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 18"); 4712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 18"); 4713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 14"); // func() 4716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 4722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 4723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 17"); // CAB: if 18, bashes lr - bad gcc opt? 4724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r17; 4725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n", 4733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[k], flags, xer, lr, ctr); 4734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // mtctr 4738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = 9; 4739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 4740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[k]; 4741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 18"); 4752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtlr 18"); 4754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtctr 14"); // func() 4756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mflr 18"); 4762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj lr = r18; 4763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfctr 17"); 4764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ctr = r17; 4765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n", 4773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, iargs[k], flags, xer, lr, ctr); 4774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct special_t special_t; 4780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct special_t { 4782530f73578552bc876a51fbf90cb6be29769bb362sewardj const char *name; 4783530f73578552bc876a51fbf90cb6be29769bb362sewardj void (*test_cb)(const char* name, test_func_t func, 4784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags); 4785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 4786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_special (special_t *table, 4788530f73578552bc876a51fbf90cb6be29769bb362sewardj const char* name, test_func_t func, 4789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4791530f73578552bc876a51fbf90cb6be29769bb362sewardj const char *tmp; 4792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 4793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (tmp = name; isspace(*tmp); tmp++) 4795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 4796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; table[i].name != NULL; i++) { 4797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "look for handler for '%s' (%s)\n", name, 4799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj table[i].name); 4800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (strcmp(table[i].name, tmp) == 0) { 4802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*table[i].test_cb)(name, func, test_flags); 4803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return; 4804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "ERROR: no test found for op '%s'\n", name); 4807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_int_ops[] = { 4810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwimi", /* One register + 3 5 bits immediate arguments */ 4812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwi_cb, 4813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwimi.", /* One register + 3 5 bits immediate arguments */ 4816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwi_cb, 4817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwinm", /* One register + 3 5 bits immediate arguments */ 4820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwi_cb, 4821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwinm.", /* One register + 3 5 bits immediate arguments */ 4824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwi_cb, 4825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwnm", /* Two registers + 2 5 bits immediate arguments */ 4828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwnm_cb, 4829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "rlwnm.", /* Two registers + 2 5 bits immediate arguments */ 4832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &rlwnm_cb, 4833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "srawi", /* One register + 1 5 bits immediate arguments */ 4836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &srawi_cb, 4837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "srawi.", /* One register + 1 5 bits immediate arguments */ 4840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &srawi_cb, 4841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mcrf", /* 2 3 bits immediate arguments */ 4844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mcrf_cb, 4845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mcrfs", /* 2 3 bits immediate arguments */ 4849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mcrfs_cb, 4850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mcrxr", /* 1 3 bits immediate argument */ 4854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mcrxr_cb, 4855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mfcr", /* No arguments */ 4858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mfcr_cb, 4859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mfspr", /* 1 10 bits immediate argument */ 4862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mfspr_cb, 4863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 4865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { // Move from time base 4866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mftb", /* 1 10 bits immediate arguments */ 4867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mftb_cb, 4868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 4870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtcrf", /* One register + 1 8 bits immediate arguments */ 4872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtcrf_cb, 4873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtspr", /* One register + 1 10 bits immediate arguments */ 4876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtspr_cb, 4877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 4879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 4880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 4881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 4882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 4883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4884530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_special (const char* name, test_func_t func, 4885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t test_flags) 4886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_special(special_int_ops, name, func, test_flags); 4888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4891530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_ld_one_reg_imm16 (const char* name, 4892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func, 4893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 4896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, rA, flags, xer, tmpcr, tmpxer; 4897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 4898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // +ve d 4900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i * 4; // sizeof(uint32_t) 4902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm16(func_buf, p, j); 4905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = (uint32_t)&iargs[0]; 4907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r14; 4925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, (%08x) => %08x, (%08x %08x)\n", 4933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, /*&iargs[0], */ iargs[i], res, /*rA, */ flags, xer); 4934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 4936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // -ve d 4938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i = -nb_iargs+1; i<=0; i++) { 4939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i * 4; // sizeof(uint32_t) 4940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 4941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 4942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm16(func_buf, p, j); 4943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 4944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = (uint32_t)&iargs[nb_iargs-1]; 4945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 4959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 4961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 4962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r14; 4963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 4965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 4966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 4968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d, (%08x) => %08x (%08x %08x)\n", 4971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, j, /*&iargs[nb_iargs-1], */ iargs[nb_iargs-1+i], res, /*rA, */ flags, xer); 4972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 4973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 4974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4975530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_ld_two_regs (const char* name, 4976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func, 4977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 4978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 4979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, rA, flags, xer, tmpcr, tmpxer; 4980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 4981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // +ve d 4983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 4984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i * 4; // sizeof(uint32_t) 4985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = (uint32_t)&iargs[0]; 4986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = j; 4987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 4989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 4990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 4991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 4992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 4993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 4994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 4995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 4996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 4997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 4998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 4999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 5003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 5004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r14; 5005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %d (%08x) => %08x (%08x %08x)\n", 5013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, /*&iargs[0], */ j, iargs[i], res, /*rA, */ flags, xer); 5014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5017530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_st_two_regs_imm16 (const char* name, 5018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func, 5019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 5022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t rA, flags, xer, tmpcr, tmpxer; 5023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 5024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t *iargs_priv; 5025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // private iargs table to store to 5027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs_priv = malloc(nb_iargs * sizeof(uint32_t)); 5028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) 5029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs_priv[i] = 0; 5030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // __asm__ __volatile__ ("stwu 14,0(15)"); 5032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // +ve d 5034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 5035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i * 4; // sizeof(uint32_t) 5036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 5037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 5038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm16(func_buf, p, j); 5039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 5040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; // read from iargs 5041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = (uint32_t)&iargs_priv[0]; // store to r15 + j 5042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 5058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r15; 5059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %d => %08x, (%08x %08x)\n", 5067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], j, /*&iargs_priv[0], */ iargs_priv[i], /*rA, */ flags, xer); 5068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // -ve d 5072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i = -nb_iargs+1; i<=0; i++) { 5073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i * 4; // sizeof(uint32_t) 5074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 5075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 5076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm16(func_buf, p, j); 5077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 5078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[nb_iargs-1+i]; // read from iargs 5079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = (uint32_t)&iargs_priv[nb_iargs-1]; // store to r15 + j 5080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 5096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r15; 5097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %d => %08x, (%08x %08x)\n", 5105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[nb_iargs-1+i], j, /*&iargs_priv[nb_iargs-1], */ iargs_priv[nb_iargs-1+i], /*rA, */ flags, xer); 5106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj free(iargs_priv); 5108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5110530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_st_three_regs (const char* name, 5111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_func_t func, 5112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t rA, flags, xer, tmpcr, tmpxer; 5115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 5116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t *iargs_priv; 5117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // private iargs table to store to 5119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs_priv = malloc(nb_iargs * sizeof(uint32_t)); 5120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) 5121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj iargs_priv[i] = 0; 5122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 5124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj j = i * 4; // sizeof(uint32_t) 5125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; // read from iargs 5126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = (uint32_t)&iargs_priv[0]; // store to r15 + j 5127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r16 = j; 5128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 5144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj rA = r15; 5145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %d => %08x, (%08x %08x)\n", 5153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], /*&iargs_priv[0], */ j, iargs_priv[i], /*rA, */ flags, xer); 5154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj free(iargs_priv); 5156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args 5160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj Elements correspond to enum test_flags::num args 5161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 5162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t int_loops[] = { 5163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_one_arg, 5164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_two_args, 5165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_three_args, 5166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_two_args, 5167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_one_reg_imm16, 5168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_one_reg_imm16, 5169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_special, 5170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_ld_one_reg_imm16, 5171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_ld_two_regs, 5172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_st_two_regs_imm16, 5173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_int_st_three_regs, 5174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 5175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 5177530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_three_args (const char* name, test_func_t func, 5178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj double res; 5181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t u0, u1, u2, ur; 5182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr, tmpxer; 5183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k; 5184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_fargs; i+=3) { 5186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_fargs; j+=5) { 5187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_fargs; k+=7) { 5188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u0 = *(uint64_t *)(&fargs[i]); 5189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u1 = *(uint64_t *)(&fargs[j]); 5190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u2 = *(uint64_t *)(&fargs[k]); 5191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f14 = fargs[i]; 5192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f15 = fargs[j]; 5193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f16 = fargs[k]; 5194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f18 = +0.0; 5204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtfsf 0xFF, 18"); 5205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = f17; 5209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ur = *(uint64_t *)(&res); 5210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %016llx, %016llx, %016llx => %016llx (%08x)\n", 5216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, u0, u1, u2, ur, flags); 5217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5223530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_two_args (const char* name, test_func_t func, 5224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj double res; 5227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t u0, u1, ur; 5228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr, tmpxer; 5229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j; 5230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_fargs; i+=3) { 5232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_fargs; j+=5) { 5233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u0 = *(uint64_t *)(&fargs[i]); 5234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u1 = *(uint64_t *)(&fargs[j]); 5235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f14 = fargs[i]; 5236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f15 = fargs[j]; 5237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f18 = +0.0; 5247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtfsf 0xFF, 18"); 5248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = f17; 5252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ur = *(uint64_t *)(&res); 5253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %016llx, %016llx => %016llx (%08x)\n", 5259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, u0, u1, ur, flags); 5260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5265530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_one_arg (const char* name, test_func_t func, 5266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj double res; 5269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint64_t u0, ur; 5270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr, tmpxer; 5271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 5272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_fargs; i++) { 5274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj u0 = *(uint64_t *)(&fargs[i]); 5275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f14 = fargs[i]; 5276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 5279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 5280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 5281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 5282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 5283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj f18 = +0.0; 5286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtfsf 0xFF, 18"); 5287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 5289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 5290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = f17; 5291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ur = *(uint64_t *)(&res); 5292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 5294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 5295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 5296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 5297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %016llx => %016llx (%08x)\n", name, u0, ur, flags); 5298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Special test cases for: 5302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mffs 5303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtfsb0 5304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtfsb1 5305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 5306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_float_ops[] = { 5307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0 5308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mffs", /* One 5 bits immediate argument */ 5310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mffs.", /* One 5 bits immediate argument */ 5314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsb0", /* One 5 bits immediate argument */ 5318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsb0.", /* One 5 bits immediate argument */ 5322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsb1", /* One 5 bits immediate argument */ 5326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsb1.", /* One 5 bits immediate argument */ 5330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mffs_cb, 5331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsf", /* One register + 1 8 bits immediate argument */ 5334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtfsf_cb, 5335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsf.", /* One register + 1 8 bits immediate argument */ 5338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtfsf_cb, 5339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsfi", /* One 5 bits argument + 1 5 bits argument */ 5342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtfsfi_cb, 5343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "mtfsfi.", /* One 5 bits argument + 1 5 bits argument */ 5346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &mtfsfi_cb, 5347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 5354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5355530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_special (const char* name, test_func_t func, 5356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t test_flags) 5357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_special(special_float_ops, name, func, test_flags); 5359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args 5362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj Elements correspond to enum test_flags::num args 5363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 5364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t float_loops[] = { 5365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_float_one_arg, 5366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_float_two_args, 5367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_float_three_args, 5368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_float_two_args, 5369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_float_special, 5372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 5376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 5377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 5378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 5381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Ref: vector insns to test setting CR, VSCR: 5383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int v1 = 5384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF }; 5385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (vector unsigned int){ 0x80808080,0x80808080,0x80808080,0x80808080 }; 5386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int v2 = 5387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF }; 5388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (vector unsigned int){ 0x01010101,0x01010101,0x01010101,0x01010101 }; 5389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj //__asm__ __volatile__ ("vcmpequw. 31,%0,%1" : : "vr" (v1), "vr" (v2)); // sets CR[6] 5390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj //__asm__ __volatile__ ("vpkswss 31,%0,%1" : : "vr" (v1), "vr" (v2)); // sets VSCR[SAT] 5391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vsubsbs 31,%0,%1" : : "vr" (v1), "vr" (v2)); // sets VSCR[SAT] 5392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 5393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define DEFAULT_VSCR 0x00010000 5395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5396530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_one_arg (const char* name, test_func_t func, 5397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 5400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 5401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 5402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 5404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 5406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 5407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_in = (vector unsigned int)viargs[i]; 5409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 }; 5410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 5412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 5413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 5414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 5415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 5416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load input -> r14 5418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in)); 5419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 5421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 5424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 5425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 5427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 5428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 5429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 5432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 5433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src = (unsigned int*)&vec_in; 5435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* dst = (unsigned int*)&vec_out; 5436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %08x %08x %08x %08x\n", name, 5437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src[0], src[1], src[2], src[3]); 5438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 5439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 5440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 5441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* p_vscr = (unsigned int*)𝓋 5442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 5443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 5444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 5445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5449530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_two_args (const char* name, test_func_t func, 5450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 5453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 5454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j; 5455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 5457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int vec_in1 = (vector unsigned int)viargs[i]; 5458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_viargs; j++) { 5459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int vec_in2 = (vector unsigned int)viargs[j]; 5460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 }; 5461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 5464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 5465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 5467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 5468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 5469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 5470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 5471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15 5473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 5474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2)); 5475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 5477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 5480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 5481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 5483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 5484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 5485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 5488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 5489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src1 = (unsigned int*)&vec_in1; 5491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src2 = (unsigned int*)&vec_in2; 5492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* dst = (unsigned int*)&vec_out; 5493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: ", name); 5494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]); 5495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]); 5496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 5497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 5498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 5499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* p_vscr = (unsigned int*)𝓋 5500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 5501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 5502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 5503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5509530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_three_args (const char* name, test_func_t func, 5510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 5513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 5514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j,k; 5515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 5517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_in1 = (vector unsigned int)viargs[i]; 5518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_viargs; j++) { 5519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_in2 = (vector unsigned int)viargs[j]; 5520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_viargs; k++) { 5521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_in3 = (vector unsigned int)viargs[k]; 5522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 }; 5523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 5526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 5527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 5529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 5530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 5531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 5532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 5533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15,r16 5535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 5536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2)); 5537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 16,%0,%0" : : "vr" (vec_in3)); 5538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 5540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 5543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 5544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 5546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 5547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 5548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 5551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 5552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src1 = (unsigned int*)&vec_in1; 5554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src2 = (unsigned int*)&vec_in2; 5555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src3 = (unsigned int*)&vec_in3; 5556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* dst = (unsigned int*)&vec_out; 5557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name, 5558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src1[0], src1[1], src1[2], src1[3], 5559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src2[0], src2[1], src2[2], src2[3], 5560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src3[0], src3[1], src3[2], src3[3]); 5561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x%08x%08x%08x ", name, 5563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 5564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 5565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* p_vscr = (unsigned int*)𝓋 5566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 5567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 5568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 5569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5577530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vs128_cb (const char* name, test_func_t func, 5578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 5581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 5582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j; 5583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 5585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_in1 = (vector unsigned int)viargs[i]; 5586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<8; j++) { 5587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* low-order 3bits of every byte must be the same for the shift vector */ 5588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned char vec_shft = (vector unsigned char) { j,j,j,j, j,j,j,j, j,j,j,j, j,j,j,j }; 5589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 }; 5590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 5593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 5594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 5596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 }; 5597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 5598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 5599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 5600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15 5602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 5603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_shft)); 5604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 5606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 5609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 5610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 5612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 5613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 5614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 5617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 5618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src1 = (unsigned int*)&vec_in1; 5620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src2 = (unsigned int*)&vec_shft; 5621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* dst = (unsigned int*)&vec_out; 5622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: ", name); 5623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]); 5624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]); 5625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 5627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 5628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 5629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* p_vscr = (unsigned int*)𝓋 5630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 5631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 5632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 5633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5639530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vsplt_cb (const char* name, test_func_t func, 5640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 5643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 5644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 5645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j; 5646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 5648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_in1 = (vector unsigned int)viargs[i]; 5649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<16; j+=3) { 5651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 }; 5652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Patch up the instruction */ 5654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 5655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 5656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, j, 16, 5); 5657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 5658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 5661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 5662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 5664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 }; 5665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 5666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 5667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 5668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load input -> r14 5670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 5671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 5673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 5676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 5677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 5679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 5680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 5681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 5684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 5685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src1 = (unsigned int*)&vec_in1; 5687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* dst = (unsigned int*)&vec_out; 5688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: ", name); 5689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x %08x %08x %08x, %u\n", src1[0], src1[1], src1[2], src1[3], j); 5690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 5692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 5693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 5694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* p_vscr = (unsigned int*)𝓋 5695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 5696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 5697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 5698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5704530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vspltis_cb (const char* name, test_func_t func, 5705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 5708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 5709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 5710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 5711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<32; i++) { 5713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 }; 5714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Patch up the instruction */ 5716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 5717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 5718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, i, 16, 5); 5719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 5720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 5723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 5724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 5726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 }; 5727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 5728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 5729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 5730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 5732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 5735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 5736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 5738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 5739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 5740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 5743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 5744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* dst = (unsigned int*)&vec_out; 5746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %2d => ", name, i); 5747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 5749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 5750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* p_vscr = (unsigned int*)𝓋 5751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 5752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 5753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 5754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5758530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vsldoi_cb (const char* name, test_func_t func, 5759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 5760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 5762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 5763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t func_buf[2], *p; 5764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j,k; 5765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_viargs; i++) { 5767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_in1 = (vector unsigned int)viargs[i]; 5768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_viargs; j++) { 5769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_in2 = (vector unsigned int)viargs[j]; 5770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<16; k+=14) { 5771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 }; 5772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Patch up the instruction */ 5774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj p = (void *)func; 5775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func_buf[1] = p[1]; 5776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj patch_op_imm(func_buf, p, k, 6, 4); 5777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj func = (void *)func_buf; 5778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 5780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 5781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 5782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 5784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 }; 5785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 5786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 5787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 5788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15 5790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 5791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2)); 5792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 5794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 5795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 5797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 5798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 5800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 5801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 5802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 5804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 5805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 5806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src1 = (unsigned int*)&vec_in1; 5808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src2 = (unsigned int*)&vec_in2; 5809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* dst = (unsigned int*)&vec_out; 5810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: ", name); 5811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%08x%08x%08x%08x, %08x%08x%08x%08x, %u\n", 5812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src1[0], src1[1], src1[2], src1[3], 5813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src2[0], src2[1], src2[2], src2[3], k); 5814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x] ", name, 5816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 5817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 5818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* p_vscr = (unsigned int*)𝓋 5819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 5820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 5821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 5822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 5823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 5825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 5827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 582905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion/* lvsl, lvsr */ 583005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void lvs_cb (const char *name, test_func_t func, 583105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion unused uint32_t test_flags) 583205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 583305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile uint32_t flags, tmpcr; 583405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int tmpvscr; 583505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion int i; 583605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 583705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (i=-1; i<17; i++) { 583805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 }; 583905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 584005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // make sure start address is 16 aligned - use viargs[0] 584105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r15 = (uint32_t)&viargs[0]; 584205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r14 = i; 584305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 584405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Save flags */ 584505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 584605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 584705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 584805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // reset VSCR and CR 584905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 }; 585005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion flags = 0; 585105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 585205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 585305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 585405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // do stuff 585505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion (*func)(); 585605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 585705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // retrieve output <- r17 585805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 585905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 586005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // get CR,VSCR flags 586105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 586205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 586305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 586405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Restore flags */ 586505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 586605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 586705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 586805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion unsigned int* dst = (unsigned int*)&vec_out; 586905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("%s %3d, %3d", name, i, 0); 587005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 587105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("(%08x)\n", flags); 587205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 587305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion if (verbose) printf("\n"); 587405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 587505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 5876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_av_int_ops[] = { 5877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vsr", /* Two registers arguments */ 5879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vs128_cb, 5880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vsl", /* Two registers arguments */ 5883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vs128_cb, 5884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vspltb", /* One reg, one 5-bit uimm arguments */ 5887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vsplt_cb, 5888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vsplth", /* One reg, one 5-bit uimm arguments */ 5891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vsplt_cb, 5892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vspltw", /* One reg, one 5-bit uimm arguments */ 5895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vsplt_cb, 5896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vspltisb", /* One reg, one 5-bit uimm arguments */ 5899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vspltis_cb, 5900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vspltish", /* One reg, one 5-bit uimm arguments */ 5903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vspltis_cb, 5904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vspltisw", /* One reg, one 5-bit uimm arguments */ 5907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vspltis_cb, 5908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 5909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj { 5910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "vsldoi", /* Two regs, one 4-bit uimm arguments */ 5911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &vsldoi_cb, 5912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj }, 591305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { 591405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion "lvsl", /* Two regs */ 591505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion &lvs_cb, 591605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion }, 591705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { 591805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion "lvsr", /* Two regs */ 591905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion &lvs_cb, 592005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion }, 592105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion { 592205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion NULL, 592305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion NULL, 592405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion }, 5925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 5926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 5927530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_special (const char* name, test_func_t func, 5928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj uint32_t test_flags) 5929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 5930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_special(special_av_int_ops, name, func, test_flags); 5931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 5932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 593305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_av_int_ld_two_regs (const char *name, 593405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion test_func_t func, 593505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion unused uint32_t test_flags) 593605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 593705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile uint32_t flags, tmpcr; 593805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int tmpvscr; 593905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion int i,j; 594005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 594105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (i=0; i<nb_viargs; i++) { 594205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (j=0; j<16; j+=7) { 594305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 }; 594405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 594505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // load from viargs array + some dis-alignment 594605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r15 = (uint32_t)&viargs[0]; 594705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r14 = i*16 + j; 594805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 594905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Save flags */ 595005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 595105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 595205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 595305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // reset VSCR and CR 595405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 595505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion flags = 0; 595605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 595705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 595805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 595905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // do stuff 596005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion (*func)(); 596105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 596205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // retrieve output <- r17 596305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 596405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 596505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // get CR,VSCR flags 596605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 596705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 596805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 596905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Restore flags */ 597005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 597105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 597205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 597305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int vec_in = (vector unsigned int)viargs[i]; 597405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion unsigned int* src = (unsigned int*)&vec_in; 597505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion unsigned int* dst = (unsigned int*)&vec_out; 597605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]); 597705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 597805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("(%08x)\n", flags); 597905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 598005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion if (verbose) printf("\n"); 598105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 598205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 598305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 598405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 598505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_av_int_st_three_regs (const char *name, 598605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion test_func_t func, 598705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion unused uint32_t test_flags) 598805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{ 598905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile uint32_t flags, tmpcr; 599005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int tmpvscr; 599105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion int i,j; 599205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion vector unsigned int* viargs_priv; 599305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 599405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // private viargs table to store to 599505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion viargs_priv = memalign(16,(nb_viargs * sizeof(uint32_t))); 599605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (i=0; i<nb_viargs; i++) 599705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion viargs_priv[i] = (vector unsigned int) { 0,0,0,0 }; 599805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 599905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (i=0; i<nb_viargs; i++) { 600005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion for (j=0; j<16; j+=7) { 600105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // read from viargs 600205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int vec_in = (vector unsigned int)viargs[i]; 600305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 600405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // store to viargs_priv[0] + some dis-alignment 600505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r16 = (uint32_t)&viargs_priv[0]; 600605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion r15 = i*16 + j; 600705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 600805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Save flags */ 600905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 601005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 601105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 601205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // reset VSCR and CR 601305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR }; 601405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion flags = 0; 601505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 601605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 601705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 601805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // load inputs -> r14 601905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in)); 602005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 602105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // do stuff 602205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion (*func)(); 602305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 602405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // Output stored in viargs_priv 602505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 602605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion // get CR,VSCR flags 602705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 602805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 602905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 603005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion /* Restore flags */ 603105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 603205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 603305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 603405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion volatile vector unsigned int vec_out = (vector unsigned int)viargs_priv[i]; 603505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion unsigned int* src = (unsigned int*)&vec_in; 603605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion unsigned int* dst = (unsigned int*)&vec_out; 603705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]); 603805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]); 603905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion printf("(%08x)\n", flags); 604005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 604105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion if (verbose) printf("\n"); 604205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion } 604305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion} 604405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion 6045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args 6046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj Elements correspond to enum test_flags::num args 6047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 6048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t altivec_int_loops[] = { 6049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_int_one_arg, 6050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_int_two_args, 6051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_int_three_args, 6052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_int_two_args, 6053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 6054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 6055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_int_special, 6056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 605705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion &test_av_int_ld_two_regs, 6058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 605905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion test_av_int_st_three_regs, 6060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 6061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6063530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_one_arg (const char* name, test_func_t func, 6064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i; 6069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_vfargs; i++) { 6071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector float vec_in = (vector float)vfargs[i]; 6072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector float vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 }; 6073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vscr = (vector unsigned int){ 0,0,0,0 }; 6080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load input -> r14 6085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in)); 6086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src = (unsigned int*)&vec_in; 6102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* dst = (unsigned int*)&vec_out; 6103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %08x %08x %08x %08x\n", name, 6104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src[0], src[1], src[2], src[3]); 6105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 6107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 6108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* p_vscr = (unsigned int*)𝓋 6110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 6111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 6113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6117530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_two_args (const char* name, test_func_t func, 6118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j; 6123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_vfargs; i++) { 6125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_vfargs; j+=3) { 6126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector float vec_in1 = (vector float)vfargs[i]; 6127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector float vec_in2 = (vector float)vfargs[j]; 6128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector float vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 }; 6129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vscr = (vector unsigned int){ 0,0,0,0 }; 6136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15 6141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 6142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2)); 6143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src1 = (unsigned int*)&vec_in1; 6159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src2 = (unsigned int*)&vec_in2; 6160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* dst = (unsigned int*)&vec_out; 6161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %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 6165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 6166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 6167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* p_vscr = (unsigned int*)𝓋 6169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 6170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 6172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 6175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6178530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_three_args (const char* name, test_func_t func, 6179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t flags, tmpcr; 6182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile vector unsigned int tmpvscr; 6183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i,j,k; 6184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_vfargs; i++) { 6186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_vfargs; j+=3) { 6187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_vfargs; k+=5) { 6188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector float vec_in1 = (vector float)vfargs[i]; 6189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector float vec_in2 = (vector float)vfargs[j]; 6190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector float vec_in3 = (vector float)vfargs[k]; 6191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector float vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 }; 6192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (tmpcr)); 6195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr)); 6196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // reset VSCR and CR 6198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj vector unsigned int vscr = (vector unsigned int){ 0,0,0,0 }; 6199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = 0; 6200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) ); 6201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (flags)); 6202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // load inputs -> r14,r15,r16 6204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1)); 6205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2)); 6206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor 16,%0,%0" : : "vr" (vec_in3)); 6207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // do stuff 6209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // retrieve output <- r17 6212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out)); 6213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // get CR,VSCR flags 6215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr %0" : "=r" (flags)); 6216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr)); 6217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr %0" : : "r" (tmpcr)); 6220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr)); 6221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src1 = (unsigned int*)&vec_in1; 6223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src2 = (unsigned int*)&vec_in2; 6224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* src3 = (unsigned int*)&vec_in3; 6225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* dst = (unsigned int*)&vec_out; 6226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name, 6227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src1[0], src1[1], src1[2], src1[3], 6228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src2[0], src2[1], src2[2], src2[3], 6229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj src3[0], src3[1], src3[2], src3[3]); 6230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s: => %08x %08x %08x %08x ", name, 6232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj dst[0], dst[1], dst[2], dst[3]); 6233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT 6234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned int* p_vscr = (unsigned int*)𝓋 6235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x, %08x)\n", flags, p_vscr[3]); 6236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("(%08x)\n", flags); 6238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 6241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args 6246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj Elements correspond to enum test_flags::num args 6247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/ 6248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t altivec_float_loops[] = { 6249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_float_one_arg, 6250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_float_two_args, 6251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_float_three_args, 6252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj &test_av_float_two_args, 6253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 6254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 6255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 6256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 6257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 6258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 6259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj NULL, 6260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}; 6261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */ 6263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 6266530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_ppc405 (const char* name, test_func_t func, 6267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unused uint32_t test_flags) 6268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj volatile uint32_t res, flags, xer, tmpcr, tmpxer; 6270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, k; 6271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; i<nb_iargs; i++) { 6273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; j<nb_iargs; j++) { 6274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (k=0; k<nb_iargs; k++) { 6275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r14 = iargs[i]; 6276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r15 = iargs[j]; 6277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Beware: the third argument and the result 6278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * are in the same register 6279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 6280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r17 = iargs[k]; 6281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Save flags */ 6282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 6283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpcr = r18; 6284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 6285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpxer = r18; 6286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Set up flags for test */ 6287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = 0; 6288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 6289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 6290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*func)(); 6291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfcr 18"); 6292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags = r18; 6293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mfxer 18"); 6294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj xer = r18; 6295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj res = r17; 6296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Restore flags */ 6297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpcr; 6298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtcr 18"); 6299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj r18 = tmpxer; 6300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj __asm__ __volatile__ ("mtxer 18"); 6301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n", 6302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, iargs[i], iargs[j], iargs[k], res, flags, xer); 6303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 6305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 6309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6310530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic int check_filter (char *filter) 6311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6312530f73578552bc876a51fbf90cb6be29769bb362sewardj char *c; 6313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int ret = 1; 6314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (filter != NULL) { 6316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj c = strchr(filter, '*'); 6317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (c != NULL) { 6318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *c = '\0'; 6319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ret = 0; 6320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return ret; 6324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6326530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic int check_name (const char* name, const char *filter, 6327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int exact) 6328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int nlen, flen; 6330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int ret = 0; 6331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (filter != NULL) { 6333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (; isspace(*name); name++) 6334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 6335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj FDPRINTF("Check '%s' againt '%s' (%s match)\n", 6336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj name, filter, exact ? "exact" : "starting"); 6337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nlen = strlen(name); 6338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flen = strlen(filter); 6339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (exact) { 6340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (nlen == flen && memcmp(name, filter, flen) == 0) 6341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ret = 1; 6342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { 6343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (flen <= nlen && memcmp(name, filter, flen) == 0) 6344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ret = 1; 6345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { 6347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ret = 1; 6348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return ret; 6350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct insn_sel_flags_t_struct { 6355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int one_arg, two_args, three_args; 6356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int arith, logical, compare, ldst; 6357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int integer, floats, p405, altivec, faltivec; 6358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int cr; 6359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} insn_sel_flags_t; 6360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void do_tests ( insn_sel_flags_t seln_flags, 6362530f73578552bc876a51fbf90cb6be29769bb362sewardj char *filter) 6363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 6365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_loop_t tmpl; 6366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_loop_t *loop; 6368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj test_t *tests; 6369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int nb_args, type, family; 6370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int i, j, n; 6371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int exact; 6372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj exact = check_filter(filter); 6374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj n = 0; 6375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (i=0; all_tests[i].name != NULL; i++) { 6376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj nb_args = all_tests[i].flags & PPC_NB_ARGS; 6377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Check number of arguments */ 6378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if ((nb_args == 1 && !seln_flags.one_arg) || 6379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (nb_args == 2 && !seln_flags.two_args) || 6380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (nb_args == 3 && !seln_flags.three_args)) 6381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 6382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Check instruction type */ 6383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj type = all_tests[i].flags & PPC_TYPE; 6384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if ((type == PPC_ARITH && !seln_flags.arith) || 6385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (type == PPC_LOGICAL && !seln_flags.logical) || 6386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (type == PPC_COMPARE && !seln_flags.compare) || 6387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (type == PPC_LDST && !seln_flags.ldst)) 6388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 6389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Check instruction family */ 6390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj family = all_tests[i].flags & PPC_FAMILY; 6391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if ((family == PPC_INTEGER && !seln_flags.integer) || 6392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (family == PPC_FLOAT && !seln_flags.floats) || 6393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (family == PPC_405 && !seln_flags.p405) || 6394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (family == PPC_ALTIVEC && !seln_flags.altivec) || 6395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (family == PPC_FALTIVEC && !seln_flags.faltivec)) 6396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 6397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Check flags update */ 6398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (((all_tests[i].flags & PPC_CR) && seln_flags.cr == 0) || 6399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (!(all_tests[i].flags & PPC_CR) && seln_flags.cr == 1)) 6400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 6401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* All passed, do the tests */ 6402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tests = all_tests[i].tests; 6403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Select the test loop */ 6404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj switch (family) { 6405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case PPC_INTEGER: 6406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj loop = &int_loops[nb_args - 1]; 6407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case PPC_FLOAT: 6409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT) 6410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj loop = &float_loops[nb_args - 1]; 6411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Sorry. " 6414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC floating point instructions tests " 6415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "are disabled on your host\n"); 6416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */ 6417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case PPC_405: 6419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405) 6420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmpl = &test_ppc405; 6421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj loop = &tmpl; 6422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Sorry. " 6425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "PPC405 instructions tests are disabled on your host\n"); 6426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 6427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */ 6428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case PPC_ALTIVEC: 6429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 6430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj loop = &altivec_int_loops[nb_args - 1]; 6431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Sorry. " 6434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec instructions tests are disabled on your host\n"); 6435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 6436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case PPC_FALTIVEC: 6438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 6439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj loop = &altivec_float_loops[nb_args - 1]; 6440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Sorry. " 6443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "Altivec float instructions tests " 6444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "are disabled on your host\n"); 6445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 6447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj default: 6448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("ERROR: unknown insn family %08x\n", family); 6449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj continue; 6450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (1 || verbose > 0) 6452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("%s:\n", all_tests[i].name); 6453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj for (j=0; tests[j].name != NULL; j++) { 6454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (check_name(tests[j].name, filter, exact)) { 6455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose > 1) 6456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("Test instruction %s\n", tests[j].name); 6457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj (*loop)(tests[j].name, tests[j].func, all_tests[i].flags); 6458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("\n"); 6459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj n++; 6460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose) printf("\n"); 6463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("All done. Tested %d different instructions\n", n); 6465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void usage (void) 6469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (USAGE_SIMPLE) 6471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, 6472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "test-ppc [-1] [-2] [-3] [-*] [-t <type>] [-f <family>] [-u] " 6473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "[-n <filter>] [-r <test_rigour>] [-h]\n" 6474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-1: test opcodes with one argument\n" 6475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-2: test opcodes with two arguments\n" 6476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-3: test opcodes with three arguments\n" 6477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-*: launch test without checking the number of arguments\n" 6478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-t: launch test for instructions of type <type>\n" 6479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t recognized types:\n" 6480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tarith (or a)\n" 6481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tlogical (or l)\n" 6482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tcompare (or c)\n" 6483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tstoreload (or s)\n" 6484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-f: launch test for instructions of family <family>\n" 6485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t recognized families:\n" 6486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tinteger (or i)\n" 6487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tfloat (or f)\n" 6488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tppc405 (or mac)\n" 6489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\taltivec (or a)\n" 6490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-u: test instructions that update flags\n" 6491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-n: filter instructions with <filter>\n" 6492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t <filter> can be in two forms:\n" 6493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tname : filter functions that exactly match <name>\n" 6494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tname* : filter functions that start with <name>\n" 6495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-r: set size of arg tables to use to define <test_rigour>\n" 6496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t recognized types:\n" 6497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tlarge (or l)\n" 6498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t\tsmall (or s) - default\n" 6499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-v: verbose (-v -v for more)\n" 6500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-h: print this help\n" 6501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ); 6502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, 6504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "test-ppc [-a]\n" 6505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj "\t-a: include tests for altivec instructions\n" 6506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ); 6507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjint main (int argc, char **argv) 6511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{ 6512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (USAGE_SIMPLE) 6513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj unsigned char *tmp, *filter = NULL; 6514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj insn_sel_flags_t flags; 6515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int c; 6516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.one_arg = 0; 6518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.two_args = 0; 6519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.three_args = 0; 6520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.arith = 0; 6521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.logical = 0; 6522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.compare = 0; 6523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.ldst = 0; 6524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.integer = 0; 6525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.floats = 0; 6526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.p405 = 0; 6527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.altivec = 0; 6528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.faltivec = 0; 6529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.cr = -1; 6530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj while ((c = getopt(argc, argv, "123t:f:n:r:uvh")) != -1) { 6532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj switch (c) { 6533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case '1': 6534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.one_arg = 1; 6535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case '2': 6537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.two_args = 1; 6538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case '3': 6540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.three_args = 1; 6541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 't': 6543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = optarg; 6544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (strcmp(tmp, "arith") == 0 || strcmp(tmp, "a") == 0) { 6545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.arith = 1; 6546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "logical") == 0 || strcmp(tmp, "l") == 0) { 6547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.logical = 1; 6548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "compare") == 0 || strcmp(tmp, "c") == 0) { 6549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.compare = 1; 6550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "storeload") == 0 || strcmp(tmp, "s") == 0) { 6551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.ldst = 1; 6552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { 6553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj goto bad_arg; 6554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'f': 6557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = optarg; 6558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (strcmp(tmp, "integer") == 0 || strcmp(tmp, "i") == 0) { 6559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.integer = 1; 6560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "float") == 0 || strcmp(tmp, "f") == 0) { 6561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.floats = 1; 6562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "ppc405") == 0 || strcmp(tmp, "mac") == 0) { 6563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.p405 = 1; 6564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "altivec") == 0 || strcmp(tmp, "a") == 0) { 6565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.altivec = 1; 6566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.faltivec = 1; 6567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { 6568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj goto bad_arg; 6569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'n': 6572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj filter = optarg; 6573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'r': 6575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj tmp = optarg; 6576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (strcmp(tmp, "large") == 0 || strcmp(tmp, "l") == 0) { 6577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj arg_list_size = 1; 6578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else if (strcmp(tmp, "small") == 0 || strcmp(tmp, "s") == 0) { 6579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj arg_list_size = 0; 6580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } else { 6581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj goto bad_arg; 6582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'u': 6586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.cr = 1; 6587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'h': 6589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 6590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 0; 6591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'v': 6592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj verbose++; 6593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj default: 6595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 6596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Unknown argument: '%c'\n", c); 6597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 1; 6598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj bad_arg: 6599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 6600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Bad argument for '%c': '%s'\n", c, tmp); 6601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 1; 6602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (argc != optind) { 6605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 6606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Bad number of arguments\n"); 6607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 1; 6608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Default n_args 6611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (flags.one_arg == 0 && flags.two_args == 0 && flags.three_args == 0) { 6612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.one_arg = 1; 6613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.two_args = 1; 6614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.three_args = 1; 6615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Default type 6617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (flags.arith == 0 && flags.logical == 0 && 6618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.compare == 0 && flags.ldst == 0) { 6619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.arith = 1; 6620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.logical = 1; 6621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.compare = 1; 6622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.ldst = 1; 6623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Default family 6625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (flags.integer == 0 && flags.floats == 0 && 6626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.p405 == 0 && flags.altivec == 0 && flags.faltivec == 0) { 6627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.integer = 1; 6628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.floats = 1; 6629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.p405 = 1; 6630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.altivec = 1; 6631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.faltivec = 1; 6632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Default cr update 6634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (flags.cr == -1) 6635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.cr = 2; // both 6636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else 6638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj /* Simple usage: 6639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ./test-ppc => all insns, except AV 6640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj ./test-ppc -a => all insns, including AV 6641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */ 6642530f73578552bc876a51fbf90cb6be29769bb362sewardj char *filter = NULL; 6643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj insn_sel_flags_t flags; 6644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj int c; 6645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Args 6647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.one_arg = 1; 6648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.two_args = 1; 6649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.three_args = 1; 6650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Type 6651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.arith = 1; 6652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.logical = 1; 6653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.compare = 1; 6654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.ldst = 1; 6655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Family 6656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.integer = 1; 6657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.floats = 0; 6658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.p405 = 0; 6659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.altivec = 0; 6660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.faltivec = 0; 6661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // Flags 6662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.cr = 2; 6663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj while ((c = getopt(argc, argv, "ahv")) != -1) { 6665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj switch (c) { 6666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'a': 6667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj flags.altivec = 1; 666805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion flags.faltivec = 1; 6669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'h': 6671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 6672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 0; 6673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj case 'v': 6674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj verbose++; 6675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj break; 6676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj default: 6677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj usage(); 6678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj fprintf(stderr, "Unknown argument: '%c'\n", c); 6679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 1; 6680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj arg_list_size = 0; 6684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj build_iargs_table(); 6688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj build_fargs_table(); 6689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj build_ii16_table(); 6690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 6691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj build_viargs_table(); 6692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj build_vfargs_table(); 6693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // dump_iargs(); 6695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // dump_iargs16(); 6696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj // dump_vfargs(); 6697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj if (verbose > 1) { 6699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("\nInstruction Selection:\n"); 6700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" n_args: \n"); 6701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" one_arg = %d\n", flags.one_arg); 6702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" two_args = %d\n", flags.two_args); 6703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" three_args = %d\n", flags.three_args); 6704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" type: \n"); 6705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" arith = %d\n", flags.arith); 6706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" logical = %d\n", flags.logical); 6707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" compare = %d\n", flags.compare); 6708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" ldst = %d\n", flags.ldst); 6709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" family: \n"); 6710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" integer = %d\n", flags.integer); 6711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" floats = %d\n", flags.floats); 6712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" p405 = %d\n", flags.p405); 6713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" altivec = %d\n", flags.altivec); 6714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" faltivec = %d\n", flags.faltivec); 6715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" cr update: \n"); 6716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" cr = %d\n", flags.cr); 6717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("\n"); 6718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" num args: \n"); 6719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" iargs - %d\n", nb_iargs); 6720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" fargs - %d\n", nb_fargs); 6721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC) 6722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" viargs - %d\n", nb_viargs); 6723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf(" vfargs - %d\n", nb_vfargs); 6724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif 6725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj printf("\n"); 6726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj } 6727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj do_tests( flags, filter ); 6729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj 6730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj return 0; 6731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} 6732