1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* HOW TO COMPILE FOR SWITCHBACK:
3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   gcc -O -c test_ppc_jm1.c -mregnames -Wall
5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov*/
7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#undef  HAS_ALTIVEC
9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define NO_FLOAT
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#undef  IS_PPC405
11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*
14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * test-ppc.c:
15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * PPC tests for qemu-PPC CPU emulation checks
16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *
17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * Copyright (c) 2005 Jocelyn Mayer
18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *
19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * This program is free software; you can redistribute it and/or
20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * modify it under the terms of the GNU General Public License V2
21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * as published by the Free Software Foundation.
22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov */
23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*
25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * Theory of operations:
26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * a few registers are reserved for the test program:
27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * r14 => r18
28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * f14 => f18
29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * I do preload test values in r14 thru r17 (or less, depending on the number
30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * of register operands needed), patch the test opcode if any immediate
31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * operands are required, execute the tested opcode.
32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * XER, CCR and FPSCR are cleared before every test.
33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * I always get the result in r17 and also save XER and CCR for fixed-point
34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * operations. I also check FPSCR for floating points operations.
35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *
36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * Improvments:
37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * a more cleaver FPSCR management is needed: for now, I always test
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * the round-to-zero case. Other rounding modes also need to be tested.
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov */
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <stdint.h>
42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#include <stdlib.h>
43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#include <stdio.h>
44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#include <string.h>
45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#include <unistd.h>
46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#include <fcntl.h>
47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#include <ctype.h>
48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#include <math.h>
49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#include <fenv.h>
50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define NULL ((void*)0)
52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#include "test-ppc.h"
54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// BEGIN #include "test-ppc.h"
56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*
57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * test-ppc.h:
58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * PPC tests for qemu-PPC CPU emulation checks - definitions
59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *
60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * Copyright (c) 2005 Jocelyn Mayer
61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *
62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * This program is free software; you can redistribute it and/or
63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * modify it under the terms of the GNU General Public License V2
64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * as published by the Free Software Foundation.
65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov */
66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (__TEST_PPC_H__)
68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define __TEST_PPC_H__
69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef void (*test_func_t) (void);
71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef struct test_t test_t;
72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef struct test_table_t test_table_t;
73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct test_t {
74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    test_func_t func;
75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    const unsigned char *name;
76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct test_table_t {
79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    test_t *tests;
80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    const unsigned char *name;
81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int flags;
82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
84b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef void (*test_loop_t) (const unsigned char *name, test_func_t func);
85b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
86b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovenum test_flags {
87b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* Nb arguments */
88b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_ONE_ARG    = 0x00000001,
89b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_TWO_ARGS   = 0x00000002,
90b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_THREE_ARGS = 0x00000003,
91b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_CMP_ARGS   = 0x00000004,
92b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_CMPI_ARGS  = 0x00000005,
93b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_TWO_I16    = 0x00000006,
94b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_SPECIAL    = 0x00000007,
95b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_NB_ARGS    = 0x0000000F,
96b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* Type */
97b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_ARITH      = 0x00000100,
98b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_LOGICAL    = 0x00000200,
99b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_COMPARE    = 0x00000300,
100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_CROP       = 0x00000400,
101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_TYPE       = 0x00000F00,
102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* Family */
103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_INTEGER    = 0x00010000,
104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_FLOAT      = 0x00020000,
105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_405        = 0x00030000,
106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_ALTIVEC    = 0x00040000,
107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_FALTIVEC   = 0x00050000,
108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_FAMILY     = 0x000F0000,
109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* Flags */
110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_CR         = 0x01000000,
111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (__TEST_PPC_H__) */
114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// END #include "test-ppc.h"
116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#define DEBUG_ARGS_BUILD
121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (DEBUG_ARGS_BUILD)
122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define AB_DPRINTF(fmt, args...) do { vexxx_printf(fmt , ##args); } while (0)
123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define AB_DPRINTF(fmt, args...) do { } while (0)
125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#define DEBUG_FILTER
128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (DEBUG_FILTER)
129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define FDPRINTF(fmt, args...) do { vexxx_printf(fmt , ##args); } while (0)
130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define FDPRINTF(fmt, args...) do { } while (0)
132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovregister double f14 __asm__ ("f14");
136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovregister double f15 __asm__ ("f15");
137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovregister double f16 __asm__ ("f16");
138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovregister double f17 __asm__ ("f17");
139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovregister double f18 __asm__ ("f18");
140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovregister uint32_t r14 __asm__ ("r14");
142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovregister uint32_t r15 __asm__ ("r15");
143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovregister uint32_t r16 __asm__ ("r16");
144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovregister uint32_t r17 __asm__ ("r17");
145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovregister uint32_t r18 __asm__ ("r18");
146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/////////////////////////////////////////////////////////////////////
149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/////////////////////////////////////////////////////////////////////
150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/////////////////////////////////////////////////////////////////////
151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/////////////////////////////////////////////////////////////////////
152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Something which has the same size as void* on the host.  That is,
154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   it is 32 bits on a 32-bit host and 64 bits on a 64-bit host, and so
155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   it can safely be coerced to and from a pointer type on the host
156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   machine. */
157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef  unsigned long HWord;
158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef  char          HChar;
159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef  signed int    Int;
160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef  unsigned int  UInt;
161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef  unsigned char UChar;
162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef    signed long long int   Long;
164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef  unsigned long long int   ULong;
165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef unsigned char   Bool;
167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define True  ((Bool)1)
168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define False ((Bool)0)
169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//#include "/home/sewardj/VEX/trunk/pub/libvex_basictypes.h"
172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HWord (*serviceFn)(HWord,HWord) = 0;
174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic Bool my_isspace ( UChar c )
176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return c == ' '
178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          || c == '\f'
179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          || c == '\n'
180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          || c == '\r'
181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          || c == '\t'
182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          || c == '\v';
183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 0 // unused
186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic char* my_strcpy ( char* dest, const char* src )
187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   char* dest_orig = dest;
189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   while (*src) *dest++ = *src++;
190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   *dest = 0;
191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return dest_orig;
192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void* my_memcpy ( void *dest, const void *src, int sz )
195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   const char *s = (const char *)src;
197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   char *d = (char *)dest;
198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   while (sz--)
200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      *d++ = *s++;
201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return dest;
203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void* my_memmove( void *dst, const void *src, unsigned int len )
206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    register char *d;
208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    register char *s;
209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if ( dst > src ) {
210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        d = (char *)dst + len - 1;
211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        s = (char *)src + len - 1;
212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        while ( len >= 4 ) {
213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            *d-- = *s--;
214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            *d-- = *s--;
215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            *d-- = *s--;
216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            *d-- = *s--;
217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            len -= 4;
218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        while ( len-- ) {
220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            *d-- = *s--;
221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    } else if ( dst < src ) {
223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        d = (char *)dst;
224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        s = (char *)src;
225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        while ( len >= 4 ) {
226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            *d++ = *s++;
227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            *d++ = *s++;
228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            *d++ = *s++;
229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            *d++ = *s++;
230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            len -= 4;
231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        while ( len-- ) {
233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            *d++ = *s++;
234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    return dst;
237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovchar* my_strcat ( char* dest, const char* src )
241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   char* dest_orig = dest;
243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   while (*dest) dest++;
244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   while (*src) *dest++ = *src++;
245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   *dest = 0;
246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return dest_orig;
247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint my_strcmp ( const char* s1, const char* s2 )
250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   register unsigned char c1;
252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   register unsigned char c2;
253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   while (True) {
254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      c1 = *(unsigned char *)s1;
255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      c2 = *(unsigned char *)s2;
256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (c1 != c2) break;
257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (c1 == 0) break;
258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s1++; s2++;
259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((unsigned char)c1 < (unsigned char)c2) return -1;
261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((unsigned char)c1 > (unsigned char)c2) return 1;
262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return 0;
263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint my_memcmp ( const void *s1V, const void *s2V, int n )
267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   int res;
269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   unsigned char a0;
270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   unsigned char b0;
271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   unsigned char* s1 = (unsigned char*)s1V;
272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   unsigned char* s2 = (unsigned char*)s2V;
273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   while (n != 0) {
275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      a0 = s1[0];
276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      b0 = s2[0];
277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s1 += 1;
278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s2 += 1;
279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      res = ((int)a0) - ((int)b0);
280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (res != 0)
281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         return res;
282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n -= 1;
283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return 0;
285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovchar* my_strchr ( const char* s, int c )
288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar  ch = (UChar)((UInt)c);
290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar* p  = (UChar*)s;
291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   while (True) {
292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (*p == ch) return p;
293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (*p == 0) return NULL;
294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      p++;
295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid* my_malloc ( int n )
299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov  void* r = (void*) (*serviceFn)(2,n);
301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov  return r;
302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/////////////////////////////////////////////////////////////////////
306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void vexxx_log_bytes ( char* p, int n )
308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   int i;
310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   for (i = 0; i < n; i++)
311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      (*serviceFn)( 1, (int)p[i] );
312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*---------------------------------------------------------*/
315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- vexxx_printf                                        ---*/
316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*---------------------------------------------------------*/
317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* This should be the only <...> include in the entire VEX library.
319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   New code for vex_util.c should go above this point. */
320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <stdarg.h>
321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar vexxx_toupper ( HChar c )
323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (c >= 'a' && c <= 'z')
325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      return c + ('A' - 'a');
326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   else
327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      return c;
328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic Int vexxx_strlen ( const HChar* str )
331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int i = 0;
333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   while (str[i] != 0) i++;
334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return i;
335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovBool vexxx_streq ( const HChar* s1, const HChar* s2 )
338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   while (True) {
340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (*s1 == 0 && *s2 == 0)
341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         return True;
342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (*s1 != *s2)
343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         return False;
344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s1++;
345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s2++;
346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Some flags.  */
350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VG_MSG_SIGNED    1 /* The value is signed. */
351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VG_MSG_ZJUSTIFY  2 /* Must justify with '0'. */
352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VG_MSG_LJUSTIFY  4 /* Must justify on the left. */
353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VG_MSG_PAREN     8 /* Parenthesize if present (for %y) */
354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VG_MSG_COMMA    16 /* Add commas to numbers (for %d, %u) */
355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Copy a string into the buffer. */
357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic UInt
358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovmyvprintf_str ( void(*send)(HChar), Int flags, Int width, HChar* str,
359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                Bool capitalise )
360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#  define MAYBE_TOUPPER(ch) (capitalise ? vexxx_toupper(ch) : (ch))
362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt ret = 0;
363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int i, extra;
364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int len = vexxx_strlen(str);
365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (width == 0) {
367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      ret += len;
368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      for (i = 0; i < len; i++)
369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         send(MAYBE_TOUPPER(str[i]));
370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      return ret;
371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (len > width) {
374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      ret += width;
375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      for (i = 0; i < width; i++)
376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         send(MAYBE_TOUPPER(str[i]));
377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      return ret;
378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   extra = width - len;
381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (flags & VG_MSG_LJUSTIFY) {
382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      ret += extra;
383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      for (i = 0; i < extra; i++)
384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         send(' ');
385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ret += len;
387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   for (i = 0; i < len; i++)
388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      send(MAYBE_TOUPPER(str[i]));
389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (!(flags & VG_MSG_LJUSTIFY)) {
390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      ret += extra;
391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      for (i = 0; i < extra; i++)
392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         send(' ');
393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#  undef MAYBE_TOUPPER
396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return ret;
398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write P into the buffer according to these args:
401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *  If SIGN is true, p is a signed.
402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *  BASE is the base.
403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *  If WITH_ZERO is true, '0' must be added.
404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *  WIDTH is the width of the field.
405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov */
406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic UInt
407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovmyvprintf_int64 ( void(*send)(HChar), Int flags, Int base, Int width, ULong pL)
408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar buf[40];
410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int   ind = 0;
411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int   i, nc = 0;
412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Bool  neg = False;
413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *digits = "0123456789ABCDEF";
414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt  ret = 0;
415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt  p = (UInt)pL;
416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (base < 2 || base > 16)
418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      return ret;
419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((flags & VG_MSG_SIGNED) && (Int)p < 0) {
421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      p   = - (Int)p;
422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      neg = True;
423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (p == 0)
426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      buf[ind++] = '0';
427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   else {
428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      while (p > 0) {
429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if ((flags & VG_MSG_COMMA) && 10 == base &&
430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             0 == (ind-nc) % 3 && 0 != ind)
431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         {
432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            buf[ind++] = ',';
433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            nc++;
434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         }
435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         buf[ind++] = digits[p % base];
436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         p /= base;
437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (neg)
441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      buf[ind++] = '-';
442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (width > 0 && !(flags & VG_MSG_LJUSTIFY)) {
444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      for(; ind < width; ind++) {
445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	//vassert(ind < 39);
446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         buf[ind] = ((flags & VG_MSG_ZJUSTIFY) ? '0': ' ');
447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Reverse copy to buffer.  */
451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ret += ind;
452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   for (i = ind -1; i >= 0; i--) {
453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      send(buf[i]);
454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (width > 0 && (flags & VG_MSG_LJUSTIFY)) {
456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      for(; ind < width; ind++) {
457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	 ret++;
458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         send(' ');  // Never pad with zeroes on RHS -- changes the value!
459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return ret;
462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* A simple vprintf().  */
466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic
467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovUInt vprintf_wrk ( void(*send)(HChar), const HChar *format, va_list vargs )
468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt ret = 0;
470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   int i;
471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   int flags;
472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   int width;
473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Bool is_long;
474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* We assume that vargs has already been initialised by the
476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      caller, using va_start, and that the caller will similarly
477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      clean up with va_end.
478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   */
479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   for (i = 0; format[i] != 0; i++) {
481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (format[i] != '%') {
482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         send(format[i]);
483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	 ret++;
484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         continue;
485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      i++;
487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* A '%' has been found.  Ignore a trailing %. */
488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (format[i] == 0)
489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         break;
490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (format[i] == '%') {
491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         /* `%%' is replaced by `%'. */
492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         send('%');
493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	 ret++;
494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         continue;
495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      flags = 0;
497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      is_long = False;
498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      width = 0; /* length of the field. */
499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (format[i] == '(') {
500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	 flags |= VG_MSG_PAREN;
501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	 i++;
502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* If ',' follows '%', commas will be inserted. */
504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (format[i] == ',') {
505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         flags |= VG_MSG_COMMA;
506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         i++;
507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* If '-' follows '%', justify on the left. */
509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (format[i] == '-') {
510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         flags |= VG_MSG_LJUSTIFY;
511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         i++;
512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* If '0' follows '%', pads will be inserted. */
514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (format[i] == '0') {
515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         flags |= VG_MSG_ZJUSTIFY;
516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         i++;
517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* Compute the field length. */
519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      while (format[i] >= '0' && format[i] <= '9') {
520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         width *= 10;
521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         width += format[i++] - '0';
522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      while (format[i] == 'l') {
524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         i++;
525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         is_long = True;
526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      switch (format[i]) {
529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         case 'd': /* %d */
530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            flags |= VG_MSG_SIGNED;
531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            if (is_long)
532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               ret += myvprintf_int64(send, flags, 10, width,
533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov				      (ULong)(va_arg (vargs, Long)));
534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            else
535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               ret += myvprintf_int64(send, flags, 10, width,
536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov				      (ULong)(va_arg (vargs, Int)));
537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         case 'u': /* %u */
539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            if (is_long)
540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               ret += myvprintf_int64(send, flags, 10, width,
541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov				      (ULong)(va_arg (vargs, ULong)));
542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            else
543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               ret += myvprintf_int64(send, flags, 10, width,
544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov				      (ULong)(va_arg (vargs, UInt)));
545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         case 'p': /* %p */
547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	    ret += 2;
548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            send('0');
549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            send('x');
550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            ret += myvprintf_int64(send, flags, 16, width,
551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov				   (ULong)((HWord)va_arg (vargs, void *)));
552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         case 'x': /* %x */
554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            if (is_long)
555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               ret += myvprintf_int64(send, flags, 16, width,
556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov				      (ULong)(va_arg (vargs, ULong)));
557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            else
558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               ret += myvprintf_int64(send, flags, 16, width,
559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov				      (ULong)(va_arg (vargs, UInt)));
560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         case 'c': /* %c */
562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	    ret++;
563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            send((va_arg (vargs, int)));
564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         case 's': case 'S': { /* %s */
566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            char *str = va_arg (vargs, char *);
567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            if (str == (char*) 0) str = "(null)";
568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            ret += myvprintf_str(send, flags, width, str,
569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 (format[i]=='S'));
570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	 }
572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#        if 0
573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	 case 'y': { /* %y - print symbol */
574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	    Char buf[100];
575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	    Char *cp = buf;
576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	    Addr a = va_arg(vargs, Addr);
577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	    if (flags & VG_MSG_PAREN)
579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	       *cp++ = '(';
580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	    if (VG_(get_fnname_w_offset)(a, cp, sizeof(buf)-4)) {
581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	       if (flags & VG_MSG_PAREN) {
582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		  cp += VG_(strlen)(cp);
583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		  *cp++ = ')';
584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		  *cp = '\0';
585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	       }
586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	       ret += myvprintf_str(send, flags, width, buf, 0);
587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	    }
588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	    break;
589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	 }
590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#        endif
591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         default:
592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return ret;
596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* A general replacement for printf().  Note that only low-level
600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   debugging info should be sent via here.  The official route is to
601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   to use vg_message().  This interface is deprecated.
602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov*/
603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar myprintf_buf[1000];
604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic Int   n_myprintf_buf;
605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void add_to_myprintf_buf ( HChar c )
607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (c == '\n' || n_myprintf_buf >= 1000-10 /*paranoia*/ ) {
609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      (*vexxx_log_bytes)( myprintf_buf, vexxx_strlen(myprintf_buf) );
610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n_myprintf_buf = 0;
611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      myprintf_buf[n_myprintf_buf] = 0;
612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   myprintf_buf[n_myprintf_buf++] = c;
614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   myprintf_buf[n_myprintf_buf] = 0;
615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic UInt vexxx_printf ( const char *format, ... )
618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt ret;
620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_list vargs;
621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_start(vargs,format);
622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   n_myprintf_buf = 0;
624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   myprintf_buf[n_myprintf_buf] = 0;
625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ret = vprintf_wrk ( add_to_myprintf_buf, format, vargs );
626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (n_myprintf_buf > 0) {
628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      (*vexxx_log_bytes)( myprintf_buf, n_myprintf_buf );
629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   va_end(vargs);
632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return ret;
634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*---------------------------------------------------------------*/
637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- end                                          vex_util.c ---*/
638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*---------------------------------------------------------------*/
639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/////////////////////////////////////////////////////////////////////
642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/////////////////////////////////////////////////////////////////////
643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/////////////////////////////////////////////////////////////////////
644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/////////////////////////////////////////////////////////////////////
645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// BEGIN #include "ops-ppc.c"
647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*
648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * WARNING:
649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * This file has been auto-generated by './gen-ppc' program
650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * Please don't edit by hand
651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov */
652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//BEGIN #include "test-ppc.h"
655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*
656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * test-ppc.h:
657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * PPC tests for qemu-PPC CPU emulation checks - definitions
658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *
659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * Copyright (c) 2005 Jocelyn Mayer
660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *
661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * This program is free software; you can redistribute it and/or
662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * modify it under the terms of the GNU General Public License V2
663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * as published by the Free Software Foundation.
664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov */
665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (__TEST_PPC_H__)
667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define __TEST_PPC_H__
668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef void (*test_func_t) (void);
670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef struct test_t test_t;
671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef struct test_table_t test_table_t;
672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct test_t {
673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    test_func_t func;
674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    const unsigned char *name;
675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct test_table_t {
678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    test_t *tests;
679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    const unsigned char *name;
680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int flags;
681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef void (*test_loop_t) (const unsigned char *name, test_func_t func);
684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovenum test_flags {
686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* Nb arguments */
687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_ONE_ARG    = 0x00000001,
688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_TWO_ARGS   = 0x00000002,
689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_THREE_ARGS = 0x00000003,
690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_CMP_ARGS   = 0x00000004,
691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_CMPI_ARGS  = 0x00000005,
692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_TWO_I16    = 0x00000006,
693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_SPECIAL    = 0x00000007,
694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_NB_ARGS    = 0x0000000F,
695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* Type */
696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_ARITH      = 0x00000100,
697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_LOGICAL    = 0x00000200,
698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_COMPARE    = 0x00000300,
699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_CROP       = 0x00000400,
700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_TYPE       = 0x00000F00,
701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* Family */
702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_INTEGER    = 0x00010000,
703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_FLOAT      = 0x00020000,
704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_405        = 0x00030000,
705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_ALTIVEC    = 0x00040000,
706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_FALTIVEC   = 0x00050000,
707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_FAMILY     = 0x000F0000,
708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* Flags */
709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    PPC_CR         = 0x01000000,
710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (__TEST_PPC_H__) */
713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//END #include "test-ppc.h"
715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_add (void)
717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("add          17, 14, 15");
719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addo (void)
722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addo         17, 14, 15");
724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addc (void)
727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addc         17, 14, 15");
729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addco (void)
732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addco        17, 14, 15");
734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_adde (void)
737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("adde         17, 14, 15");
739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addeo (void)
742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addeo        17, 14, 15");
744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_divw (void)
747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("divw         17, 14, 15");
749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_divwo (void)
752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("divwo        17, 14, 15");
754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_divwu (void)
757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("divwu        17, 14, 15");
759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_divwuo (void)
762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("divwuo       17, 14, 15");
764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulhw (void)
767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulhw        17, 14, 15");
769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulhwu (void)
772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulhwu       17, 14, 15");
774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mullw (void)
777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mullw        17, 14, 15");
779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mullwo (void)
782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mullwo       17, 14, 15");
784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subf (void)
787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subf         17, 14, 15");
789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfo (void)
792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfo        17, 14, 15");
794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfc (void)
797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfc        17, 14, 15");
799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfco (void)
802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfco       17, 14, 15");
804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfe (void)
807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfe        17, 14, 15");
809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfeo (void)
812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfeo       17, 14, 15");
814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_ia_ops_two[] = {
817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_add             , "         add", },
818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addo            , "        addo", },
819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addc            , "        addc", },
820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addco           , "       addco", },
821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_adde            , "        adde", },
822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addeo           , "       addeo", },
823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_divw            , "        divw", },
824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_divwo           , "       divwo", },
825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_divwu           , "       divwu", },
826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_divwuo          , "      divwuo", },
827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulhw           , "       mulhw", },
828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulhwu          , "      mulhwu", },
829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mullw           , "       mullw", },
830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mullwo          , "      mullwo", },
831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subf            , "        subf", },
832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfo           , "       subfo", },
833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfc           , "       subfc", },
834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfco          , "      subfco", },
835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfe           , "       subfe", },
836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfeo          , "      subfeo", },
837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_add_ (void)
841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("add.         17, 14, 15");
843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addo_ (void)
846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addo.        17, 14, 15");
848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addc_ (void)
851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addc.        17, 14, 15");
853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addco_ (void)
856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addco.       17, 14, 15");
858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_adde_ (void)
861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("adde.        17, 14, 15");
863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addeo_ (void)
866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addeo.       17, 14, 15");
868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_divw_ (void)
871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("divw.        17, 14, 15");
873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_divwo_ (void)
876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("divwo.       17, 14, 15");
878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_divwu_ (void)
881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("divwu.       17, 14, 15");
883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_divwuo_ (void)
886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("divwuo.      17, 14, 15");
888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subf_ (void)
891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subf.        17, 14, 15");
893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfo_ (void)
896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfo.       17, 14, 15");
898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfc_ (void)
901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfc.       17, 14, 15");
903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfco_ (void)
906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfco.      17, 14, 15");
908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfe_ (void)
911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfe.       17, 14, 15");
913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfeo_ (void)
916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfeo.      17, 14, 15");
918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_iar_ops_two[] = {
921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_add_            , "        add.", },
922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addo_           , "       addo.", },
923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addc_           , "       addc.", },
924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addco_          , "      addco.", },
925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_adde_           , "       adde.", },
926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addeo_          , "      addeo.", },
927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_divw_           , "       divw.", },
928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_divwo_          , "      divwo.", },
929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_divwu_          , "      divwu.", },
930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_divwuo_         , "     divwuo.", },
931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subf_           , "       subf.", },
932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfo_          , "      subfo.", },
933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfc_          , "      subfc.", },
934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfco_         , "     subfco.", },
935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfe_          , "      subfe.", },
936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfeo_         , "     subfeo.", },
937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_and (void)
941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("and          17, 14, 15");
943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_andc (void)
946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("andc         17, 14, 15");
948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_eqv (void)
951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("eqv          17, 14, 15");
953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nand (void)
956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nand         17, 14, 15");
958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nor (void)
961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nor          17, 14, 15");
963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_or (void)
966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("or           17, 14, 15");
968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_orc (void)
971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("orc          17, 14, 15");
973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_xor (void)
976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("xor          17, 14, 15");
978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_slw (void)
981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("slw          17, 14, 15");
983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_sraw (void)
986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("sraw         17, 14, 15");
988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_srw (void)
991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("srw          17, 14, 15");
993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_il_ops_two[] = {
996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_and             , "         and", },
997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_andc            , "        andc", },
998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_eqv             , "         eqv", },
999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nand            , "        nand", },
1000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nor             , "         nor", },
1001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_or              , "          or", },
1002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_orc             , "         orc", },
1003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_xor             , "         xor", },
1004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_slw             , "         slw", },
1005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_sraw            , "        sraw", },
1006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_srw             , "         srw", },
1007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_and_ (void)
1011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("and.         17, 14, 15");
1013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_andc_ (void)
1016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("andc.        17, 14, 15");
1018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_eqv_ (void)
1021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("eqv.         17, 14, 15");
1023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulhw_ (void)
1026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulhw.       17, 14, 15");
1028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulhwu_ (void)
1031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulhwu.      17, 14, 15");
1033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mullw_ (void)
1036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mullw.       17, 14, 15");
1038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mullwo_ (void)
1041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mullwo.      17, 14, 15");
1043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nand_ (void)
1046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nand.        17, 14, 15");
1048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nor_ (void)
1051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nor.         17, 14, 15");
1053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_or_ (void)
1056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("or.          17, 14, 15");
1058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_orc_ (void)
1061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("orc.         17, 14, 15");
1063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_xor_ (void)
1066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("xor.         17, 14, 15");
1068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_slw_ (void)
1071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("slw.         17, 14, 15");
1073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_sraw_ (void)
1076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("sraw.        17, 14, 15");
1078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_srw_ (void)
1081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("srw.         17, 14, 15");
1083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_ilr_ops_two[] = {
1086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_and_            , "        and.", },
1087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_andc_           , "       andc.", },
1088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_eqv_            , "        eqv.", },
1089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulhw_          , "      mulhw.", },
1090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulhwu_         , "     mulhwu.", },
1091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mullw_          , "      mullw.", },
1092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mullwo_         , "     mullwo.", },
1093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nand_           , "       nand.", },
1094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nor_            , "        nor.", },
1095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_or_             , "         or.", },
1096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_orc_            , "        orc.", },
1097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_xor_            , "        xor.", },
1098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_slw_            , "        slw.", },
1099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_sraw_           , "       sraw.", },
1100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_srw_            , "        srw.", },
1101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_cmp (void)
1105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("cmp          2, 14, 15");
1107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_cmpl (void)
1110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("cmpl         2, 14, 15");
1112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_icr_ops_two[] = {
1115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_cmp             , "         cmp", },
1116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_cmpl            , "        cmpl", },
1117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_cmpi (void)
1121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("cmpi         2, 14, 15");
1123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_cmpli (void)
1126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("cmpli        2, 14, 15");
1128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_icr_ops_two_i16[] = {
1131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_cmpi            , "        cmpi", },
1132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_cmpli           , "       cmpli", },
1133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addi (void)
1137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addi         17, 14, 0");
1139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addic (void)
1142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addic        17, 14, 0");
1144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addis (void)
1147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addis        17, 14, 0");
1149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulli (void)
1152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulli        17, 14, 0");
1154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfic (void)
1157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfic       17, 14, 0");
1159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_ia_ops_two_i16[] = {
1162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addi            , "        addi", },
1163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addic           , "       addic", },
1164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addis           , "       addis", },
1165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulli           , "       mulli", },
1166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfic          , "      subfic", },
1167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addic_ (void)
1171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addic.       17, 14, 0");
1173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_iar_ops_two_i16[] = {
1176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addic_          , "      addic.", },
1177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_ori (void)
1181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("ori          17, 14, 0");
1183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_oris (void)
1186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("oris         17, 14, 0");
1188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_xori (void)
1191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("xori         17, 14, 0");
1193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_xoris (void)
1196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("xoris        17, 14, 0");
1198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_il_ops_two_i16[] = {
1201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_ori             , "         ori", },
1202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_oris            , "        oris", },
1203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_xori            , "        xori", },
1204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_xoris           , "       xoris", },
1205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_andi_ (void)
1209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("andi.        17, 14, 0");
1211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_andis_ (void)
1214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("andis.       17, 14, 0");
1216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_ilr_ops_two_i16[] = {
1219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_andi_           , "       andi.", },
1220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_andis_          , "      andis.", },
1221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_crand (void)
1225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("crand        17, 14, 15");
1227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_crandc (void)
1230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("crandc       17, 14, 15");
1232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_creqv (void)
1235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("creqv        17, 14, 15");
1237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_crnand (void)
1240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("crnand       17, 14, 15");
1242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_crnor (void)
1245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("crnor        17, 14, 15");
1247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_cror (void)
1250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("cror         17, 14, 15");
1252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_crorc (void)
1255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("crorc        17, 14, 15");
1257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_crxor (void)
1260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("crxor        17, 14, 15");
1262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_crl_ops_two[] = {
1265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_crand           , "       crand", },
1266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_crandc          , "      crandc", },
1267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_creqv           , "       creqv", },
1268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_crnand          , "      crnand", },
1269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_crnor           , "       crnor", },
1270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_cror            , "        cror", },
1271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_crorc           , "       crorc", },
1272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_crxor           , "       crxor", },
1273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addme (void)
1277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addme        17, 14");
1279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addmeo (void)
1282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addmeo       17, 14");
1284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addze (void)
1287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addze        17, 14");
1289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addzeo (void)
1292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addzeo       17, 14");
1294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfme (void)
1297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfme       17, 14");
1299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfmeo (void)
1302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfmeo      17, 14");
1304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfze (void)
1307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfze       17, 14");
1309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfzeo (void)
1312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfzeo      17, 14");
1314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_ia_ops_one[] = {
1317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addme           , "       addme", },
1318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addmeo          , "      addmeo", },
1319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addze           , "       addze", },
1320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addzeo          , "      addzeo", },
1321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfme          , "      subfme", },
1322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfmeo         , "     subfmeo", },
1323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfze          , "      subfze", },
1324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfzeo         , "     subfzeo", },
1325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addme_ (void)
1329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addme.       17, 14");
1331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addmeo_ (void)
1334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addmeo.      17, 14");
1336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addze_ (void)
1339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addze.       17, 14");
1341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_addzeo_ (void)
1344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("addzeo.      17, 14");
1346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfme_ (void)
1349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfme.      17, 14");
1351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfmeo_ (void)
1354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfmeo.     17, 14");
1356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfze_ (void)
1359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfze.      17, 14");
1361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_subfzeo_ (void)
1364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("subfzeo.     17, 14");
1366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_iar_ops_one[] = {
1369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addme_          , "      addme.", },
1370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addmeo_         , "     addmeo.", },
1371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addze_          , "      addze.", },
1372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_addzeo_         , "     addzeo.", },
1373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfme_         , "     subfme.", },
1374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfmeo_        , "    subfmeo.", },
1375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfze_         , "     subfze.", },
1376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_subfzeo_        , "    subfzeo.", },
1377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_cntlzw (void)
1381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("cntlzw       17, 14");
1383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_extsb (void)
1386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("extsb        17, 14");
1388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_extsh (void)
1391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("extsh        17, 14");
1393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_neg (void)
1396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("neg          17, 14");
1398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nego (void)
1401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nego         17, 14");
1403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_il_ops_one[] = {
1406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_cntlzw          , "      cntlzw", },
1407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_extsb           , "       extsb", },
1408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_extsh           , "       extsh", },
1409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_neg             , "         neg", },
1410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nego            , "        nego", },
1411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_cntlzw_ (void)
1415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("cntlzw.      17, 14");
1417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_extsb_ (void)
1420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("extsb.       17, 14");
1422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_extsh_ (void)
1425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("extsh.       17, 14");
1427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_neg_ (void)
1430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("neg.         17, 14");
1432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nego_ (void)
1435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nego.        17, 14");
1437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_ilr_ops_one[] = {
1440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_cntlzw_         , "     cntlzw.", },
1441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_extsb_          , "      extsb.", },
1442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_extsh_          , "      extsh.", },
1443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_neg_            , "        neg.", },
1444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nego_           , "       nego.", },
1445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_rlwimi (void)
1449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("rlwimi       17, 14, 0, 0, 0");
1451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_rlwinm (void)
1454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("rlwinm       17, 14, 0, 0, 0");
1456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_rlwnm (void)
1459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("rlwnm        17, 14, 15, 0, 0");
1461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_srawi (void)
1464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("srawi        17, 14, 0");
1466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_il_ops_spe[] = {
1469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_rlwimi          , "      rlwimi", },
1470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_rlwinm          , "      rlwinm", },
1471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_rlwnm           , "       rlwnm", },
1472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_srawi           , "       srawi", },
1473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_rlwimi_ (void)
1477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("rlwimi.      17, 14, 0, 0, 0");
1479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_rlwinm_ (void)
1482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("rlwinm.      17, 14, 0, 0, 0");
1484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_rlwnm_ (void)
1487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("rlwnm.       17, 14, 15, 0, 0");
1489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_srawi_ (void)
1492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("srawi.       17, 14, 0");
1494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_ilr_ops_spe[] = {
1497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_rlwimi_         , "     rlwimi.", },
1498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_rlwinm_         , "     rlwinm.", },
1499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_rlwnm_          , "      rlwnm.", },
1500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_srawi_          , "      srawi.", },
1501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
1505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fsel (void)
1506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fsel         17, 14, 15, 16");
1508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmadd (void)
1511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmadd        17, 14, 15, 16");
1513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmadds (void)
1516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmadds       17, 14, 15, 16");
1518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmsub (void)
1521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmsub        17, 14, 15, 16");
1523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmsubs (void)
1526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmsubs       17, 14, 15, 16");
1528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fnmadd (void)
1531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fnmadd       17, 14, 15, 16");
1533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fnmadds (void)
1536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fnmadds      17, 14, 15, 16");
1538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fnmsub (void)
1541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fnmsub       17, 14, 15, 16");
1543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fnmsubs (void)
1546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fnmsubs      17, 14, 15, 16");
1548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_fa_ops_three[] = {
1551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fsel            , "        fsel", },
1552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmadd           , "       fmadd", },
1553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmadds          , "      fmadds", },
1554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmsub           , "       fmsub", },
1555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmsubs          , "      fmsubs", },
1556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fnmadd          , "      fnmadd", },
1557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fnmadds         , "     fnmadds", },
1558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fnmsub          , "      fnmsub", },
1559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fnmsubs         , "     fnmsubs", },
1560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
1563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
1565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fsel_ (void)
1566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fsel.        17, 14, 15, 16");
1568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmadd_ (void)
1571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmadd.       17, 14, 15, 16");
1573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmadds_ (void)
1576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmadds.      17, 14, 15, 16");
1578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmsub_ (void)
1581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmsub.       17, 14, 15, 16");
1583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmsubs_ (void)
1586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmsubs.      17, 14, 15, 16");
1588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fnmadd_ (void)
1591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fnmadd.      17, 14, 15, 16");
1593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fnmadds_ (void)
1596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fnmadds.     17, 14, 15, 16");
1598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fnmsub_ (void)
1601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fnmsub.      17, 14, 15, 16");
1603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fnmsubs_ (void)
1606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fnmsubs.     17, 14, 15, 16");
1608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_far_ops_three[] = {
1611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fsel_           , "       fsel.", },
1612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmadd_          , "      fmadd.", },
1613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmadds_         , "     fmadds.", },
1614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmsub_          , "      fmsub.", },
1615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmsubs_         , "     fmsubs.", },
1616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fnmadd_         , "     fnmadd.", },
1617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fnmadds_        , "    fnmadds.", },
1618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fnmsub_         , "     fnmsub.", },
1619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fnmsubs_        , "    fnmsubs.", },
1620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
1623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
1625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fadd (void)
1626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fadd         17, 14, 15");
1628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fadds (void)
1631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fadds        17, 14, 15");
1633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fsub (void)
1636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fsub         17, 14, 15");
1638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fsubs (void)
1641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fsubs        17, 14, 15");
1643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmul (void)
1646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmul         17, 14, 15");
1648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmuls (void)
1651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmuls        17, 14, 15");
1653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fdiv (void)
1656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fdiv         17, 14, 15");
1658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fdivs (void)
1661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fdivs        17, 14, 15");
1663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_fa_ops_two[] = {
1666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fadd            , "        fadd", },
1667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fadds           , "       fadds", },
1668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fsub            , "        fsub", },
1669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fsubs           , "       fsubs", },
1670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmul            , "        fmul", },
1671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmuls           , "       fmuls", },
1672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fdiv            , "        fdiv", },
1673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fdivs           , "       fdivs", },
1674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
1677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
1679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fadd_ (void)
1680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fadd.        17, 14, 15");
1682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fadds_ (void)
1685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fadds.       17, 14, 15");
1687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fsub_ (void)
1690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fsub.        17, 14, 15");
1692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fsubs_ (void)
1695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fsubs.       17, 14, 15");
1697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmul_ (void)
1700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmul.        17, 14, 15");
1702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmuls_ (void)
1705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmuls.       17, 14, 15");
1707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fdiv_ (void)
1710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fdiv.        17, 14, 15");
1712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fdivs_ (void)
1715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fdivs.       17, 14, 15");
1717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_far_ops_two[] = {
1720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fadd_           , "       fadd.", },
1721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fadds_          , "      fadds.", },
1722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fsub_           , "       fsub.", },
1723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fsubs_          , "      fsubs.", },
1724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmul_           , "       fmul.", },
1725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmuls_          , "      fmuls.", },
1726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fdiv_           , "       fdiv.", },
1727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fdivs_          , "      fdivs.", },
1728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
1731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
1733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fcmpo (void)
1734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fcmpo        2, 14, 15");
1736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fcmpu (void)
1739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fcmpu        2, 14, 15");
1741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_fcr_ops_two[] = {
1744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fcmpo           , "       fcmpo", },
1745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fcmpu           , "       fcmpu", },
1746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
1749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
1751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fres (void)
1752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fres         17, 14");
1754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_frsqrte (void)
1757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("frsqrte      17, 14");
1759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_frsp (void)
1762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("frsp         17, 14");
1764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fctiw (void)
1767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fctiw        17, 14");
1769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fctiwz (void)
1772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fctiwz       17, 14");
1774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmr (void)
1777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmr          17, 14");
1779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fneg (void)
1782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fneg         17, 14");
1784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fabs (void)
1787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fabs         17, 14");
1789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fnabs (void)
1792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fnabs        17, 14");
1794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_fa_ops_one[] = {
1797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fres            , "        fres", },
1798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_frsqrte         , "     frsqrte", },
1799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_frsp            , "        frsp", },
1800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fctiw           , "       fctiw", },
1801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fctiwz          , "      fctiwz", },
1802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmr             , "         fmr", },
1803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fneg            , "        fneg", },
1804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fabs            , "        fabs", },
1805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fnabs           , "       fnabs", },
1806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
1809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
1811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fres_ (void)
1812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fres.        17, 14");
1814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_frsqrte_ (void)
1817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("frsqrte.     17, 14");
1819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_frsp_ (void)
1822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("frsp.        17, 14");
1824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fctiw_ (void)
1827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fctiw.       17, 14");
1829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fctiwz_ (void)
1832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fctiwz.      17, 14");
1834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fmr_ (void)
1837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fmr.         17, 14");
1839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fneg_ (void)
1842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fneg.        17, 14");
1844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fabs_ (void)
1847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fabs.        17, 14");
1849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_fnabs_ (void)
1852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("fnabs.       17, 14");
1854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_far_ops_one[] = {
1857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fres_           , "       fres.", },
1858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_frsqrte_        , "    frsqrte.", },
1859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_frsp_           , "       frsp.", },
1860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fctiw_          , "      fctiw.", },
1861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fctiwz_         , "     fctiwz.", },
1862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fmr_            , "        fmr.", },
1863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fneg_           , "       fneg.", },
1864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fabs_           , "       fabs.", },
1865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_fnabs_          , "      fnabs.", },
1866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
1869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
1871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_fl_ops_spe[] = {
1872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
1875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
1877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_flr_ops_spe[] = {
1878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
1881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
1883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmhaddshs (void)
1884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmhaddshs    17, 14, 15, 16");
1886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmhraddshs (void)
1889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmhraddshs   17, 14, 15, 16");
1891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmladduhm (void)
1894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmladduhm    17, 14, 15, 16");
1896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmsumubm (void)
1899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmsumubm     17, 14, 15, 16");
1901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmsumuhm (void)
1904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmsumuhm     17, 14, 15, 16");
1906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmsumshs (void)
1909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmsumshs     17, 14, 15, 16");
1911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmsumuhs (void)
1914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmsumuhs     17, 14, 15, 16");
1916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmsummbm (void)
1919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmsummbm     17, 14, 15, 16");
1921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmsumshm (void)
1924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmsumshm     17, 14, 15, 16");
1926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_aa_ops_three[] = {
1929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmhaddshs       , "   vmhaddshs", },
1930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmhraddshs      , "  vmhraddshs", },
1931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmladduhm       , "   vmladduhm", },
1932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmsumubm        , "    vmsumubm", },
1933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmsumuhm        , "    vmsumuhm", },
1934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmsumshs        , "    vmsumshs", },
1935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmsumuhs        , "    vmsumuhs", },
1936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmsummbm        , "    vmsummbm", },
1937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmsumshm        , "    vmsumshm", },
1938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
1941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
1943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vperm (void)
1944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vperm        17, 14, 15, 16");
1946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsel (void)
1949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsel         17, 14, 15, 16");
1951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_al_ops_three[] = {
1954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vperm           , "       vperm", },
1955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsel            , "        vsel", },
1956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
1957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
1958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
1959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
1961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vaddubm (void)
1962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vaddubm      17, 14, 15");
1964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vadduhm (void)
1967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vadduhm      17, 14, 15");
1969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vadduwm (void)
1972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vadduwm      17, 14, 15");
1974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vaddubs (void)
1977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vaddubs      17, 14, 15");
1979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vadduhs (void)
1982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vadduhs      17, 14, 15");
1984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vadduws (void)
1987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vadduws      17, 14, 15");
1989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vaddsbs (void)
1992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vaddsbs      17, 14, 15");
1994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vaddshs (void)
1997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vaddshs      17, 14, 15");
1999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vaddsws (void)
2002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vaddsws      17, 14, 15");
2004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vaddcuw (void)
2007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vaddcuw      17, 14, 15");
2009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsububm (void)
2012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsububm      17, 14, 15");
2014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsubuhm (void)
2017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsubuhm      17, 14, 15");
2019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsubuwm (void)
2022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsubuwm      17, 14, 15");
2024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsububs (void)
2027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsububs      17, 14, 15");
2029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsubuhs (void)
2032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsubuhs      17, 14, 15");
2034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsubuws (void)
2037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsubuws      17, 14, 15");
2039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsubcuw (void)
2042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsubcuw      17, 14, 15");
2044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmuloub (void)
2047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmuloub      17, 14, 15");
2049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmulouh (void)
2052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmulouh      17, 14, 15");
2054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmulosb (void)
2057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmulosb      17, 14, 15");
2059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmulosh (void)
2062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmulosh      17, 14, 15");
2064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmuleub (void)
2067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmuleub      17, 14, 15");
2069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmuleuh (void)
2072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmuleuh      17, 14, 15");
2074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmulesb (void)
2077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmulesb      17, 14, 15");
2079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmulesh (void)
2082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmulesh      17, 14, 15");
2084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsumsws (void)
2087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsumsws      17, 14, 15");
2089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsum2sws (void)
2092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsum2sws     17, 14, 15");
2094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsum4ubs (void)
2097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsum4ubs     17, 14, 15");
2099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsum4sbs (void)
2102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsum4sbs     17, 14, 15");
2104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsum4shs (void)
2107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsum4shs     17, 14, 15");
2109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vavgub (void)
2112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vavgub       17, 14, 15");
2114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vavguh (void)
2117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vavguh       17, 14, 15");
2119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vavguw (void)
2122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vavguw       17, 14, 15");
2124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vavgsb (void)
2127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vavgsb       17, 14, 15");
2129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vavgsh (void)
2132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vavgsh       17, 14, 15");
2134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vavgsw (void)
2137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vavgsw       17, 14, 15");
2139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmaxub (void)
2142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmaxub       17, 14, 15");
2144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmaxuh (void)
2147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmaxuh       17, 14, 15");
2149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmaxuw (void)
2152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmaxuw       17, 14, 15");
2154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmaxsb (void)
2157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmaxsb       17, 14, 15");
2159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmaxsh (void)
2162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmaxsh       17, 14, 15");
2164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmaxsw (void)
2167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmaxsw       17, 14, 15");
2169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vminub (void)
2172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vminub       17, 14, 15");
2174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vminuh (void)
2177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vminuh       17, 14, 15");
2179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vminuw (void)
2182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vminuw       17, 14, 15");
2184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vminsb (void)
2187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vminsb       17, 14, 15");
2189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vminsh (void)
2192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vminsh       17, 14, 15");
2194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vminsw (void)
2197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vminsw       17, 14, 15");
2199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_aa_ops_two[] = {
2202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vaddubm         , "     vaddubm", },
2203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vadduhm         , "     vadduhm", },
2204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vadduwm         , "     vadduwm", },
2205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vaddubs         , "     vaddubs", },
2206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vadduhs         , "     vadduhs", },
2207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vadduws         , "     vadduws", },
2208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vaddsbs         , "     vaddsbs", },
2209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vaddshs         , "     vaddshs", },
2210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vaddsws         , "     vaddsws", },
2211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vaddcuw         , "     vaddcuw", },
2212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsububm         , "     vsububm", },
2213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsubuhm         , "     vsubuhm", },
2214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsubuwm         , "     vsubuwm", },
2215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsububs         , "     vsububs", },
2216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsubuhs         , "     vsubuhs", },
2217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsubuws         , "     vsubuws", },
2218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsubcuw         , "     vsubcuw", },
2219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmuloub         , "     vmuloub", },
2220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmulouh         , "     vmulouh", },
2221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmulosb         , "     vmulosb", },
2222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmulosh         , "     vmulosh", },
2223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmuleub         , "     vmuleub", },
2224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmuleuh         , "     vmuleuh", },
2225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmulesb         , "     vmulesb", },
2226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmulesh         , "     vmulesh", },
2227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsumsws         , "     vsumsws", },
2228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsum2sws        , "    vsum2sws", },
2229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsum4ubs        , "    vsum4ubs", },
2230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsum4sbs        , "    vsum4sbs", },
2231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsum4shs        , "    vsum4shs", },
2232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vavgub          , "      vavgub", },
2233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vavguh          , "      vavguh", },
2234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vavguw          , "      vavguw", },
2235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vavgsb          , "      vavgsb", },
2236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vavgsh          , "      vavgsh", },
2237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vavgsw          , "      vavgsw", },
2238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmaxub          , "      vmaxub", },
2239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmaxuh          , "      vmaxuh", },
2240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmaxuw          , "      vmaxuw", },
2241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmaxsb          , "      vmaxsb", },
2242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmaxsh          , "      vmaxsh", },
2243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmaxsw          , "      vmaxsw", },
2244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vminub          , "      vminub", },
2245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vminuh          , "      vminuh", },
2246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vminuw          , "      vminuw", },
2247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vminsb          , "      vminsb", },
2248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vminsh          , "      vminsh", },
2249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vminsw          , "      vminsw", },
2250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
2251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
2252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
2253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
2255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vand (void)
2256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vand         17, 14, 15");
2258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vor (void)
2261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vor          17, 14, 15");
2263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vxor (void)
2266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vxor         17, 14, 15");
2268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vandc (void)
2271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vandc        17, 14, 15");
2273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vnor (void)
2276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vnor         17, 14, 15");
2278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vrlb (void)
2281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vrlb         17, 14, 15");
2283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vrlh (void)
2286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vrlh         17, 14, 15");
2288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vrlw (void)
2291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vrlw         17, 14, 15");
2293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vslb (void)
2296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vslb         17, 14, 15");
2298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vslh (void)
2301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vslh         17, 14, 15");
2303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vslw (void)
2306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vslw         17, 14, 15");
2308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsrb (void)
2311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsrb         17, 14, 15");
2313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsrh (void)
2316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsrh         17, 14, 15");
2318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsrw (void)
2321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsrw         17, 14, 15");
2323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsrab (void)
2326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsrab        17, 14, 15");
2328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsrah (void)
2331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsrah        17, 14, 15");
2333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsraw (void)
2336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsraw        17, 14, 15");
2338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vpkuhum (void)
2341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vpkuhum      17, 14, 15");
2343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vpkuwum (void)
2346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vpkuwum      17, 14, 15");
2348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vpkuhus (void)
2351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vpkuhus      17, 14, 15");
2353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vpkuwus (void)
2356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vpkuwus      17, 14, 15");
2358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vpkshus (void)
2361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vpkshus      17, 14, 15");
2363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vpkswus (void)
2366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vpkswus      17, 14, 15");
2368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vpkshss (void)
2371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vpkshss      17, 14, 15");
2373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vpkswss (void)
2376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vpkswss      17, 14, 15");
2378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vpkpx (void)
2381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vpkpx        17, 14, 15");
2383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmrghb (void)
2386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmrghb       17, 14, 15");
2388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmrghh (void)
2391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmrghh       17, 14, 15");
2393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmrghw (void)
2396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmrghw       17, 14, 15");
2398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmrglb (void)
2401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmrglb       17, 14, 15");
2403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmrglh (void)
2406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmrglh       17, 14, 15");
2408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmrglw (void)
2411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmrglw       17, 14, 15");
2413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsl (void)
2416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsl          17, 14, 15");
2418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsr (void)
2421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsr          17, 14, 15");
2423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vslo (void)
2426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vslo         17, 14, 15");
2428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsro (void)
2431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsro         17, 14, 15");
2433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_al_ops_two[] = {
2436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vand            , "        vand", },
2437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vor             , "         vor", },
2438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vxor            , "        vxor", },
2439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vandc           , "       vandc", },
2440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vnor            , "        vnor", },
2441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vrlb            , "        vrlb", },
2442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vrlh            , "        vrlh", },
2443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vrlw            , "        vrlw", },
2444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vslb            , "        vslb", },
2445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vslh            , "        vslh", },
2446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vslw            , "        vslw", },
2447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsrb            , "        vsrb", },
2448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsrh            , "        vsrh", },
2449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsrw            , "        vsrw", },
2450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsrab           , "       vsrab", },
2451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsrah           , "       vsrah", },
2452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsraw           , "       vsraw", },
2453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vpkuhum         , "     vpkuhum", },
2454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vpkuwum         , "     vpkuwum", },
2455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vpkuhus         , "     vpkuhus", },
2456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vpkuwus         , "     vpkuwus", },
2457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vpkshus         , "     vpkshus", },
2458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vpkswus         , "     vpkswus", },
2459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vpkshss         , "     vpkshss", },
2460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vpkswss         , "     vpkswss", },
2461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vpkpx           , "       vpkpx", },
2462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmrghb          , "      vmrghb", },
2463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmrghh          , "      vmrghh", },
2464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmrghw          , "      vmrghw", },
2465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmrglb          , "      vmrglb", },
2466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmrglh          , "      vmrglh", },
2467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmrglw          , "      vmrglw", },
2468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsl             , "         vsl", },
2469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsr             , "         vsr", },
2470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vslo            , "        vslo", },
2471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsro            , "        vsro", },
2472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
2473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
2474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
2475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
2477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vupkhsb (void)
2478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vupkhsb      17, 14");
2480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vupkhsh (void)
2483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vupkhsh      17, 14");
2485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vupkhpx (void)
2488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vupkhpx      17, 14");
2490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vupklsb (void)
2493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vupklsb      17, 14");
2495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vupklsh (void)
2498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vupklsh      17, 14");
2500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vupklpx (void)
2503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vupklpx      17, 14");
2505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_al_ops_one[] = {
2508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vupkhsb         , "     vupkhsb", },
2509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vupkhsh         , "     vupkhsh", },
2510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vupkhpx         , "     vupkhpx", },
2511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vupklsb         , "     vupklsb", },
2512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vupklsh         , "     vupklsh", },
2513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vupklpx         , "     vupklpx", },
2514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
2515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
2516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
2517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
2519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtub (void)
2520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtub     17, 14, 15");
2522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtuh (void)
2525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtuh     17, 14, 15");
2527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtuw (void)
2530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtuw     17, 14, 15");
2532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtsb (void)
2535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtsb     17, 14, 15");
2537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtsh (void)
2540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtsh     17, 14, 15");
2542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtsw (void)
2545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtsw     17, 14, 15");
2547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpequb (void)
2550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpequb     17, 14, 15");
2552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpequh (void)
2555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpequh     17, 14, 15");
2557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpequw (void)
2560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpequw     17, 14, 15");
2562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_ac_ops_two[] = {
2565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtub        , "    vcmpgtub", },
2566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtuh        , "    vcmpgtuh", },
2567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtuw        , "    vcmpgtuw", },
2568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtsb        , "    vcmpgtsb", },
2569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtsh        , "    vcmpgtsh", },
2570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtsw        , "    vcmpgtsw", },
2571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpequb        , "    vcmpequb", },
2572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpequh        , "    vcmpequh", },
2573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpequw        , "    vcmpequw", },
2574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
2575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
2576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
2577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
2579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtub_ (void)
2580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtub.    17, 14, 15");
2582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtuh_ (void)
2585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtuh.    17, 14, 15");
2587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtuw_ (void)
2590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtuw.    17, 14, 15");
2592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtsb_ (void)
2595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtsb.    17, 14, 15");
2597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtsh_ (void)
2600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtsh.    17, 14, 15");
2602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtsw_ (void)
2605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtsw.    17, 14, 15");
2607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpequb_ (void)
2610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpequb.    17, 14, 15");
2612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpequh_ (void)
2615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpequh.    17, 14, 15");
2617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpequw_ (void)
2620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpequw.    17, 14, 15");
2622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_acr_ops_two[] = {
2625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtub_       , "   vcmpgtub.", },
2626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtuh_       , "   vcmpgtuh.", },
2627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtuw_       , "   vcmpgtuw.", },
2628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtsb_       , "   vcmpgtsb.", },
2629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtsh_       , "   vcmpgtsh.", },
2630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtsw_       , "   vcmpgtsw.", },
2631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpequb_       , "   vcmpequb.", },
2632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpequh_       , "   vcmpequh.", },
2633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpequw_       , "   vcmpequw.", },
2634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
2635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
2636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
2637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
2639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmaddfp (void)
2640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmaddfp      17, 14, 15, 16");
2642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vnmsubfp (void)
2645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vnmsubfp     17, 14, 15, 16");
2647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_afa_ops_three[] = {
2650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmaddfp         , "     vmaddfp", },
2651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vnmsubfp        , "    vnmsubfp", },
2652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
2653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
2654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
2655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
2657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vaddfp (void)
2658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vaddfp       17, 14, 15");
2660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vsubfp (void)
2663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vsubfp       17, 14, 15");
2665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vmaxfp (void)
2668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vmaxfp       17, 14, 15");
2670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vminfp (void)
2673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vminfp       17, 14, 15");
2675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_afa_ops_two[] = {
2678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vaddfp          , "      vaddfp", },
2679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vsubfp          , "      vsubfp", },
2680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vmaxfp          , "      vmaxfp", },
2681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vminfp          , "      vminfp", },
2682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
2683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
2684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
2685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
2687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vrfin (void)
2688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vrfin        17, 14");
2690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vrfiz (void)
2693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vrfiz        17, 14");
2695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vrfip (void)
2698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vrfip        17, 14");
2700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vrfim (void)
2703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vrfim        17, 14");
2705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vrefp (void)
2708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vrefp        17, 14");
2710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vrsqrtefp (void)
2713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vrsqrtefp    17, 14");
2715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vlogefp (void)
2718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vlogefp      17, 14");
2720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vexptefp (void)
2723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vexptefp     17, 14");
2725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_afa_ops_one[] = {
2728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vrfin           , "       vrfin", },
2729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vrfiz           , "       vrfiz", },
2730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vrfip           , "       vrfip", },
2731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vrfim           , "       vrfim", },
2732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vrefp           , "       vrefp", },
2733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vrsqrtefp       , "   vrsqrtefp", },
2734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vlogefp         , "     vlogefp", },
2735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vexptefp        , "    vexptefp", },
2736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
2737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
2738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
2739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
2741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtfp (void)
2742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtfp     17, 14, 15");
2744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpeqfp (void)
2747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpeqfp     17, 14, 15");
2749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgefp (void)
2752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgefp     17, 14, 15");
2754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpbfp (void)
2757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpbfp      17, 14, 15");
2759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_afc_ops_two[] = {
2762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtfp        , "    vcmpgtfp", },
2763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpeqfp        , "    vcmpeqfp", },
2764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgefp        , "    vcmpgefp", },
2765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpbfp         , "     vcmpbfp", },
2766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
2767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
2768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
2769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
2771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgtfp_ (void)
2772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgtfp.    17, 14, 15");
2774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpeqfp_ (void)
2777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpeqfp.    17, 14, 15");
2779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpgefp_ (void)
2782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpgefp.    17, 14, 15");
2784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_vcmpbfp_ (void)
2787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("vcmpbfp.     17, 14, 15");
2789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_afcr_ops_two[] = {
2792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgtfp_       , "   vcmpgtfp.", },
2793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpeqfp_       , "   vcmpeqfp.", },
2794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpgefp_       , "   vcmpgefp.", },
2795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_vcmpbfp_        , "    vcmpbfp.", },
2796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
2797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
2798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
2799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (IS_PPC405)
2801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchw (void)
2802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchw       17, 14, 15");
2804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwo (void)
2807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwo      17, 14, 15");
2809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchws (void)
2812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchws      17, 14, 15");
2814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwso (void)
2817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwso     17, 14, 15");
2819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwsu (void)
2822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwsu     17, 14, 15");
2824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwsuo (void)
2827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwsuo    17, 14, 15");
2829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwu (void)
2832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwu      17, 14, 15");
2834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwuo (void)
2837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwuo     17, 14, 15");
2839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhw (void)
2842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhw       17, 14, 15");
2844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwo (void)
2847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwo      17, 14, 15");
2849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhws (void)
2852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhws      17, 14, 15");
2854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwso (void)
2857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwso     17, 14, 15");
2859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwsu (void)
2862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwsu     17, 14, 15");
2864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwsuo (void)
2867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwsuo    17, 14, 15");
2869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwu (void)
2872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwu      17, 14, 15");
2874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwuo (void)
2877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwuo     17, 14, 15");
2879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhw (void)
2882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhw       17, 14, 15");
2884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwo (void)
2887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwo      17, 14, 15");
2889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhws (void)
2892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhws      17, 14, 15");
2894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwso (void)
2897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwso     17, 14, 15");
2899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwsu (void)
2902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwsu     17, 14, 15");
2904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwsuo (void)
2907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwsuo    17, 14, 15");
2909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwu (void)
2912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwu      17, 14, 15");
2914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwuo (void)
2917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwuo     17, 14, 15");
2919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulchw (void)
2922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulchw       17, 14, 15");
2924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulchwu (void)
2927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulchwu      17, 14, 15");
2929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulhhw (void)
2932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulhhw       17, 14, 15");
2934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulhhwu (void)
2937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulhhwu      17, 14, 15");
2939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mullhw (void)
2942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mullhw       17, 14, 15");
2944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mullhwu (void)
2947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mullhwu      17, 14, 15");
2949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmacchw (void)
2952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmacchw      17, 14, 15");
2954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmacchwo (void)
2957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmacchwo     17, 14, 15");
2959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmacchws (void)
2962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmacchws     17, 14, 15");
2964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmacchwso (void)
2967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmacchwso    17, 14, 15");
2969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmachhw (void)
2972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmachhw      17, 14, 15");
2974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmachhwo (void)
2977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmachhwo     17, 14, 15");
2979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmachhws (void)
2982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmachhws     17, 14, 15");
2984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmachhwso (void)
2987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmachhwso    17, 14, 15");
2989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmaclhw (void)
2992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmaclhw      17, 14, 15");
2994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmaclhwo (void)
2997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmaclhwo     17, 14, 15");
2999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmaclhws (void)
3002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmaclhws     17, 14, 15");
3004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmaclhwso (void)
3007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmaclhwso    17, 14, 15");
3009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_p4m_ops_two[] = {
3012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchw          , "      macchw", },
3013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwo         , "     macchwo", },
3014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchws         , "     macchws", },
3015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwso        , "    macchwso", },
3016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwsu        , "    macchwsu", },
3017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwsuo       , "   macchwsuo", },
3018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwu         , "     macchwu", },
3019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwuo        , "    macchwuo", },
3020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhw          , "      machhw", },
3021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwo         , "     machhwo", },
3022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhws         , "     machhws", },
3023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwso        , "    machhwso", },
3024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwsu        , "    machhwsu", },
3025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwsuo       , "   machhwsuo", },
3026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwu         , "     machhwu", },
3027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwuo        , "    machhwuo", },
3028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhw          , "      maclhw", },
3029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwo         , "     maclhwo", },
3030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhws         , "     maclhws", },
3031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwso        , "    maclhwso", },
3032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwsu        , "    maclhwsu", },
3033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwsuo       , "   maclhwsuo", },
3034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwu         , "     maclhwu", },
3035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwuo        , "    maclhwuo", },
3036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulchw          , "      mulchw", },
3037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulchwu         , "     mulchwu", },
3038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulhhw          , "      mulhhw", },
3039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulhhwu         , "     mulhhwu", },
3040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mullhw          , "      mullhw", },
3041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mullhwu         , "     mullhwu", },
3042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmacchw         , "     nmacchw", },
3043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmacchwo        , "    nmacchwo", },
3044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmacchws        , "    nmacchws", },
3045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmacchwso       , "   nmacchwso", },
3046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmachhw         , "     nmachhw", },
3047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmachhwo        , "    nmachhwo", },
3048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmachhws        , "    nmachhws", },
3049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmachhwso       , "   nmachhwso", },
3050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmaclhw         , "     nmaclhw", },
3051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmaclhwo        , "    nmaclhwo", },
3052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmaclhws        , "    nmaclhws", },
3053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmaclhwso       , "   nmaclhwso", },
3054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
3055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
3056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (IS_PPC405) */
3057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (IS_PPC405)
3059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchw_ (void)
3060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchw.      17, 14, 15");
3062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwo_ (void)
3065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwo.     17, 14, 15");
3067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchws_ (void)
3070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchws.     17, 14, 15");
3072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwso_ (void)
3075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwso.    17, 14, 15");
3077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwsu_ (void)
3080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwsu.    17, 14, 15");
3082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwsuo_ (void)
3085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwsuo.   17, 14, 15");
3087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwu_ (void)
3090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwu.     17, 14, 15");
3092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_macchwuo_ (void)
3095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("macchwuo.    17, 14, 15");
3097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhw_ (void)
3100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhw.      17, 14, 15");
3102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwo_ (void)
3105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwo.     17, 14, 15");
3107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhws_ (void)
3110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhws.     17, 14, 15");
3112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwso_ (void)
3115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwso.    17, 14, 15");
3117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwsu_ (void)
3120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwsu.    17, 14, 15");
3122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwsuo_ (void)
3125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwsuo.   17, 14, 15");
3127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwu_ (void)
3130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwu.     17, 14, 15");
3132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_machhwuo_ (void)
3135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("machhwuo.    17, 14, 15");
3137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhw_ (void)
3140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhw.      17, 14, 15");
3142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwo_ (void)
3145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwo.     17, 14, 15");
3147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhws_ (void)
3150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhws.     17, 14, 15");
3152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwso_ (void)
3155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwso.    17, 14, 15");
3157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwsu_ (void)
3160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwsu.    17, 14, 15");
3162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwsuo_ (void)
3165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwsuo.   17, 14, 15");
3167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwu_ (void)
3170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwu.     17, 14, 15");
3172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_maclhwuo_ (void)
3175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("maclhwuo.    17, 14, 15");
3177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulchw_ (void)
3180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulchw.      17, 14, 15");
3182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulchwu_ (void)
3185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulchwu.     17, 14, 15");
3187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulhhw_ (void)
3190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulhhw.      17, 14, 15");
3192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mulhhwu_ (void)
3195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mulhhwu.     17, 14, 15");
3197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mullhw_ (void)
3200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mullhw.      17, 14, 15");
3202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_mullhwu_ (void)
3205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("mullhwu.     17, 14, 15");
3207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmacchw_ (void)
3210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmacchw.     17, 14, 15");
3212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmacchwo_ (void)
3215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmacchwo.    17, 14, 15");
3217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmacchws_ (void)
3220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmacchws.    17, 14, 15");
3222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmacchwso_ (void)
3225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmacchwso.   17, 14, 15");
3227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmachhw_ (void)
3230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmachhw.     17, 14, 15");
3232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmachhwo_ (void)
3235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmachhwo.    17, 14, 15");
3237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmachhws_ (void)
3240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmachhws.    17, 14, 15");
3242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmachhwso_ (void)
3245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmachhwso.   17, 14, 15");
3247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmaclhw_ (void)
3250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmaclhw.     17, 14, 15");
3252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmaclhwo_ (void)
3255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmaclhwo.    17, 14, 15");
3257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmaclhws_ (void)
3260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmaclhws.    17, 14, 15");
3262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_nmaclhwso_ (void)
3265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("nmaclhwso.   17, 14, 15");
3267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_t tests_p4mc_ops_two[] = {
3270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchw_         , "     macchw.", },
3271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwo_        , "    macchwo.", },
3272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchws_        , "    macchws.", },
3273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwso_       , "   macchwso.", },
3274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwsu_       , "   macchwsu.", },
3275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwsuo_      , "  macchwsuo.", },
3276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwu_        , "    macchwu.", },
3277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_macchwuo_       , "   macchwuo.", },
3278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhw_         , "     machhw.", },
3279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwo_        , "    machhwo.", },
3280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhws_        , "    machhws.", },
3281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwso_       , "   machhwso.", },
3282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwsu_       , "   machhwsu.", },
3283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwsuo_      , "  machhwsuo.", },
3284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwu_        , "    machhwu.", },
3285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_machhwuo_       , "   machhwuo.", },
3286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhw_         , "     maclhw.", },
3287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwo_        , "    maclhwo.", },
3288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhws_        , "    maclhws.", },
3289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwso_       , "   maclhwso.", },
3290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwsu_       , "   maclhwsu.", },
3291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwsuo_      , "  maclhwsuo.", },
3292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwu_        , "    maclhwu.", },
3293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_maclhwuo_       , "   maclhwuo.", },
3294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulchw_         , "     mulchw.", },
3295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulchwu_        , "    mulchwu.", },
3296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulhhw_         , "     mulhhw.", },
3297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mulhhwu_        , "    mulhhwu.", },
3298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mullhw_         , "     mullhw.", },
3299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_mullhwu_        , "    mullhwu.", },
3300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmacchw_        , "    nmacchw.", },
3301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmacchwo_       , "   nmacchwo.", },
3302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmacchws_       , "   nmacchws.", },
3303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmacchwso_      , "  nmacchwso.", },
3304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmachhw_        , "    nmachhw.", },
3305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmachhwo_       , "   nmachhwo.", },
3306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmachhws_       , "   nmachhws.", },
3307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmachhwso_      , "  nmachhwso.", },
3308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmaclhw_        , "    nmaclhw.", },
3309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmaclhwo_       , "   nmaclhwo.", },
3310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmaclhws_       , "   nmaclhws.", },
3311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { &test_nmaclhwso_      , "  nmaclhwso.", },
3312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,           },
3313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
3314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (IS_PPC405) */
3315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_table_t all_tests[] = {
3317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_ia_ops_two      ,
3319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer arithmetic instructions with two arguments",
3320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00010102,
3321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_iar_ops_two     ,
3324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer instructions with two arguments with flags update",
3325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01010102,
3326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_il_ops_two      ,
3329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer logical instructions with two arguments",
3330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00010202,
3331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_ilr_ops_two     ,
3334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer logical instructions with two arguments with flags update",
3335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01010202,
3336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_icr_ops_two     ,
3339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer compare instructions (two arguents)",
3340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01010304,
3341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_icr_ops_two_i16 ,
3344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer compare with immediate instructions (two arguents)",
3345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01010304,
3346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_ia_ops_two_i16  ,
3349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer arithmetic instructions\n    with one register + one 16 bits immediate arguments",
3350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00010106,
3351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_iar_ops_two_i16 ,
3354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer arithmetic instructions\n    with one register + one 16 bits immediate arguments with flags update",
3355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01010106,
3356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_il_ops_two_i16  ,
3359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer logical instructions\n    with one register + one 16 bits immediate arguments",
3360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00010206,
3361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_ilr_ops_two_i16 ,
3364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer logical instructions\n    with one register + one 16 bits immediate arguments with flags update",
3365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01010206,
3366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_crl_ops_two     ,
3369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC condition register logical instructions - two operands",
3370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01000602,
3371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_ia_ops_one      ,
3374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer arithmetic instructions with one argument",
3375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00010101,
3376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_iar_ops_one     ,
3379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer arithmetic instructions with one argument with flags update",
3380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01010101,
3381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_il_ops_one      ,
3384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer logical instructions with one argument",
3385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00010201,
3386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_ilr_ops_one     ,
3389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC integer logical instructions with one argument with flags update",
3390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01010201,
3391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_il_ops_spe      ,
3394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC logical instructions with special forms",
3395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00010207,
3396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_ilr_ops_spe     ,
3399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC logical instructions with special forms with flags update",
3400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01010207,
3401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
3403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_fa_ops_three    ,
3405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC floating point arithmetic instructions with three arguments",
3406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00020103,
3407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
3409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
3410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_far_ops_three   ,
3412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC floating point arithmetic instructions\n    with three arguments with flags update",
3413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01020103,
3414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
3416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
3417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_fa_ops_two      ,
3419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC floating point arithmetic instructions with two arguments",
3420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00020102,
3421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
3423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
3424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_far_ops_two     ,
3426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC floating point arithmetic instructions\n    with two arguments with flags update",
3427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01020102,
3428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
3430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
3431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_fcr_ops_two     ,
3433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC floating point compare instructions (two arguments)",
3434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01020304,
3435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
3437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
3438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_fa_ops_one      ,
3440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC floating point arithmetic instructions with one argument",
3441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00020101,
3442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
3444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
3445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_far_ops_one     ,
3447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC floating point arithmetic instructions\n    with one argument with flags update",
3448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01020101,
3449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
3451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
3452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_fl_ops_spe      ,
3454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC floating point status register manipulation instructions",
3455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00020207,
3456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
3458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
3459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_flr_ops_spe     ,
3461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC floating point status register manipulation instructions\n  with flags update",
3462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01020207,
3463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
3465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_aa_ops_three    ,
3468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC altivec integer arithmetic instructions with three arguments",
3469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00040103,
3470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_al_ops_three    ,
3475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC altivec integer logical instructions with three arguments",
3476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00040203,
3477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_aa_ops_two      ,
3482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC altivec integer arithmetic instructions with two arguments",
3483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00040102,
3484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_al_ops_two      ,
3489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC altivec integer logical instructions with two arguments",
3490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00040202,
3491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_al_ops_one      ,
3496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC altivec integer logical instructions with one argument",
3497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00040201,
3498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_ac_ops_two      ,
3503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "Altivec integer compare instructions",
3504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00040302,
3505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_acr_ops_two     ,
3510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "Altivec integer compare instructions with flags update",
3511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01040302,
3512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_afa_ops_three   ,
3517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "Altivec floating point arithmetic instructions with three arguments",
3518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00050103,
3519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_afa_ops_two     ,
3524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "Altivec floating point arithmetic instructions with two arguments",
3525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00050102,
3526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_afa_ops_one     ,
3531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "Altivec floating point arithmetic instructions with one argument",
3532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00050101,
3533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_afc_ops_two     ,
3538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "Altivec floating point compare instructions",
3539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00050302,
3540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
3543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_afcr_ops_two    ,
3545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "Altivec floating point compare instructions with flags update",
3546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01050302,
3547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
3549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (IS_PPC405)
3550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_p4m_ops_two     ,
3552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC 405 mac instructions with three arguments",
3553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x00030102,
3554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (IS_PPC405) */
3556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (IS_PPC405)
3557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
3558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests_p4mc_ops_two    ,
3559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "PPC 405 mac instructions with three arguments with flags update",
3560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x01030102,
3561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
3562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (IS_PPC405) */
3563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    { NULL,                   NULL,               0x00000000, },
3564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
3565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// END #include "ops-ppc.c"
3567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic int verbose = 0;
3570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic double *fargs;
3572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic int nb_fargs;
3573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic uint32_t *iargs;
3574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic int nb_iargs;
3575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic uint16_t *ii16;
3576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic int nb_ii16;
3577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic inline void register_farg (void *farg,
3579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  int s, uint16_t _exp, uint64_t mant)
3580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint64_t tmp;
3582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    tmp = ((uint64_t)s << 63) | ((uint64_t)_exp << 52) | mant;
3584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    *(uint64_t *)farg = tmp;
3585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    AB_DPRINTF("%d %03x %013llx => %016llx %0e\n",
3586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               s, _exp, mant, *(uint64_t *)farg, *(double *)farg);
3587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void build_fargs_table (void)
3590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* Sign goes from zero to one
3592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * Exponent goes from 0 to ((1 << 12) - 1)
3593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * Mantissa goes from 1 to ((1 << 52) - 1)
3594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * + special values:
3595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * +0.0      : 0 0x000 0x0000000000000
3596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * -0.0      : 1 0x000 0x0000000000000
3597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * +infinity : 0 0x7FF 0x0000000000000
3598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * -infinity : 1 0x7FF 0x0000000000000
3599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * +SNaN     : 0 0x7FF 0x7FFFFFFFFFFFF
3600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * -SNaN     : 1 0x7FF 0x7FFFFFFFFFFFF
3601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * +QNaN     : 0 0x7FF 0x8000000000000
3602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * -QNaN     : 1 0x7FF 0x8000000000000
3603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     * (8 values)
3604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     */
3605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint64_t mant;
3606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint16_t _exp, e0, e1;
3607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int s;
3608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i;
3609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    fargs = my_malloc(200 * sizeof(double));
3611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    i = 0;
3612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (s = 0; s < 2; s++) {
3613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (e0 = 0; e0 < 2; e0++) {
3614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            for (e1 = 0x000; ; e1 = ((e1 + 1) << 2) + 6) {
3615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                if (e1 >= 0x400)
3616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    e1 = 0x3fe;
3617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                _exp = (e0 << 10) | e1;
3618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                for (mant = 0x0000000000001ULL; mant < (1ULL << 52);
3619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     /* Add 'random' bits */
3620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     mant = ((mant + 0x4A6) << 13) + 0x359) {
3621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    register_farg(&fargs[i++], s, _exp, mant);
3622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                }
3623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                if (e1 == 0x3fe)
3624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    break;
3625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            }
3626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
3627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
3628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* Special values */
3629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* +0.0      : 0 0x000 0x0000000000000 */
3630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    s = 0;
3631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    _exp = 0x000;
3632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    mant = 0x0000000000000ULL;
3633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    register_farg(&fargs[i++], s, _exp, mant);
3634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* -0.0      : 1 0x000 0x0000000000000 */
3635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    s = 1;
3636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    _exp = 0x000;
3637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    mant = 0x0000000000000ULL;
3638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    register_farg(&fargs[i++], s, _exp, mant);
3639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* +infinity : 0 0x7FF 0x0000000000000  */
3640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    s = 0;
3641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    _exp = 0x7FF;
3642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    mant = 0x0000000000000ULL;
3643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    register_farg(&fargs[i++], s, _exp, mant);
3644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* -infinity : 1 0x7FF 0x0000000000000 */
3645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    s = 1;
3646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    _exp = 0x7FF;
3647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    mant = 0x0000000000000ULL;
3648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    register_farg(&fargs[i++], s, _exp, mant);
3649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* +SNaN     : 0 0x7FF 0x7FFFFFFFFFFFF */
3650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    s = 0;
3651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    _exp = 0x7FF;
3652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    mant = 0x7FFFFFFFFFFFFULL;
3653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    register_farg(&fargs[i++], s, _exp, mant);
3654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* -SNaN     : 1 0x7FF 0x7FFFFFFFFFFFF */
3655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    s = 1;
3656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    _exp = 0x7FF;
3657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    mant = 0x7FFFFFFFFFFFFULL;
3658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    register_farg(&fargs[i++], s, _exp, mant);
3659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* +QNaN     : 0 0x7FF 0x8000000000000 */
3660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    s = 0;
3661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    _exp = 0x7FF;
3662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    mant = 0x8000000000000ULL;
3663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    register_farg(&fargs[i++], s, _exp, mant);
3664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    /* -QNaN     : 1 0x7FF 0x8000000000000 */
3665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    s = 1;
3666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    _exp = 0x7FF;
3667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    mant = 0x8000000000000ULL;
3668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    register_farg(&fargs[i++], s, _exp, mant);
3669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    AB_DPRINTF("Registered %d floats values\n", i);
3670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    nb_fargs = i;
3671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void build_iargs_table (void)
3674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint64_t tmp;
3676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i;
3677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    iargs = my_malloc(400 * sizeof(uint32_t));
3679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    i = 0;
3680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (tmp = 0; ; tmp = tmp + 1 + (tmp>>1)+(tmp>>2)+(tmp>>3)) {
3681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (tmp >= 0x100000000ULL)
3682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            tmp = 0xFFFFFFFF;
3683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        iargs[i++] = tmp;
3684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        AB_DPRINTF("val %08llx\n", tmp);
3685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (tmp == 0xFFFFFFFF)
3686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
3687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
3688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    AB_DPRINTF("Registered %d ints values\n", i);
3689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    nb_iargs = i;
3690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void build_ii16_table (void)
3693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t tmp;
3695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i;
3696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    ii16 = my_malloc(200 * sizeof(uint32_t));
3698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    i = 0;
3699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (tmp = 0; ; tmp = tmp + 1 + (tmp>>1)+(tmp>>2)+(tmp>>3)) {
3700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (tmp >= 0x10000)
3701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            tmp = 0xFFFF;
3702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        ii16[i++] = tmp;
3703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        AB_DPRINTF("val %08llx\n", tmp);
3704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (tmp == 0xFFFF)
3705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
3706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
3707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    AB_DPRINTF("Registered %d ints values\n", i);
3708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    nb_ii16 = i;
3709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_int_three_args (const unsigned char *name, test_func_t func)
3712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t res, flags, xer;
3714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i, j, k;
3715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (verbose > 1)
3717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "Test instruction %s\n", name);
3718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; i < nb_iargs; i++) {
3719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (j = 0; j < nb_iargs; j++) {
3720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            for (k = 0;k < nb_iargs; k++) {
3721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                r14 = iargs[i];
3722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                r15 = iargs[j];
3723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                r16 = iargs[k];
3724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                r18 = 0;
3725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mtcr 18");
3726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mtxer 18");
3727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                (*func)();
3728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mfcr 18");
3729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                flags = r18;
3730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mfxer 18");
3731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                xer = r18;
3732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                res = r17;
3733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                vexxx_printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n",
3734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       name, iargs[i], iargs[j], iargs[k], res, flags, xer);
3735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            }
3736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf("\n");
3737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
3738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("\n");
3739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
3740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf("\n");
3741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_int_two_args (const unsigned char *name, test_func_t func)
3744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t res, flags, xer;
3746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i, j;
3747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (verbose > 1)
3749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "Test instruction %s\n", name);
3750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; i < nb_iargs; i++) {
3751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (j = 0; j < nb_iargs; j++) {
3752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            r14 = iargs[i];
3753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            r15 = iargs[j];
3754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            r18 = 0;
3755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mtcr 18");
3756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mtxer 18");
3757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (*func)();
3758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mfcr 18");
3759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            flags = r18;
3760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mfxer 18");
3761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            xer = r18;
3762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            res = r17;
3763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf("%s %08x, %08x => %08x (%08x %08x)\n",
3764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   name, iargs[i], iargs[j], res, flags, xer);
3765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
3766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("\n");
3767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
3768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf("\n");
3769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_int_one_arg (const unsigned char *name, test_func_t func)
3772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t res, flags, xer;
3774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i;
3775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (verbose > 1)
3777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "Test instruction %s\n", name);
3778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; i < nb_iargs; i++) {
3779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        r14 = iargs[i];
3780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        r18 = 0;
3781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        __asm__ __volatile__ ("mtcr 18");
3782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//        r18 = 0x20000000;                // set xer_ca
3783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        __asm__ __volatile__ ("mtxer 18");
3784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        (*func)();
3785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        res = r17;
3786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        __asm__ __volatile__ ("mfcr 18");
3787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        flags = r18;
3788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        __asm__ __volatile__ ("mfxer 18");
3789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        xer = r18;
3790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("%s %08x => %08x (%08x %08x)\n",
3791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               name, iargs[i], res, flags, xer);
3792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
3793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf("\n");
3794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic inline void _patch_op_imm (void *out, void *in,
3797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  uint16_t imm, int sh, int len)
3798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    volatile uint32_t *p, *q;
3800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    p = out;
3802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    q = in;
3803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    *p = (*q & ~(((1 << len) - 1) << sh)) | ((imm & ((1 << len) - 1)) << sh);
3804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic inline void patch_op_imm (void *out, void *in,
3807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 uint16_t imm, int sh, int len)
3808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    volatile uint32_t *p;
3810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    p = out;
3812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    _patch_op_imm(out, in, imm, sh, len);
3813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    __asm__ __volatile__ ("dcbf 0, %0 ; icbi 0, %0 ; isync" ::"r"(p));
3814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic inline void patch_op_imm16 (void *out, void *in, uint16_t imm)
3817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    patch_op_imm(out, in, imm, 0, 16);
3819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_int_one_reg_imm16 (const unsigned char *name,
3822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                    test_func_t func)
3823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t func_buf[2], *p;
3825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t res, flags, xer;
3826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i, j;
3827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (verbose > 1)
3829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "Test instruction %s\n", name);
3830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; i < nb_iargs; i++) {
3831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (j = 0; j < nb_ii16; j++) {
3832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            p = (void *)func;
3833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 0
3834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf("copy func %s from %p to %p (%08x %08x)\n",
3835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   name, func, func_buf, p[0], p[1]);
3836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
3837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            func_buf[1] = p[1];
3838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            patch_op_imm16(func_buf, p, ii16[j]);
3839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            func = (void *)func_buf;
3840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 0
3841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf(" =>  func %s from %p to %p (%08x %08x)\n",
3842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   name, func, func_buf, func_buf[0], func_buf[1]);
3843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
3844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            r14 = iargs[i];
3845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            r18 = 0;
3846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mtcr 18");
3847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mtxer 18");
3848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (*func)();
3849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mfcr 18");
3850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            flags = r18;
3851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mfxer 18");
3852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            xer = r18;
3853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            res = r17;
3854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf("%s %08x, %08x => %08x (%08x %08x)\n",
3855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   name, iargs[i], ii16[j], res, flags, xer);
3856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
3857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("\n");
3858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
3859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf("\n");
3860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Special test cases for:
3863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * rlwimi
3864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * rlwinm
3865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * rlwnm
3866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * srawi
3867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * mcrf
3868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * mcrfs
3869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * mffs
3870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * mtfsb0
3871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * mtfsb1
3872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov */
3873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void rlwi_cb (const unsigned char *name, test_func_t func)
3875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t func_buf[2], *p;
3877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t res, flags, xer;
3878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i, j, k, l;
3879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (verbose > 1)
3881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "Test instruction %s\n", name);
3882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0;;) {
3883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (i >= nb_iargs)
3884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            i = nb_iargs - 1;
3885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (j = 0; j < 32; j++) {
3886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            for (k = 0; k < 32; k++) {
3887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                for (l = 0; l < 32; l++) {
3888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    p = (void *)func;
3889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    func_buf[1] = p[1];
3890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    _patch_op_imm(func_buf, p, j, 11, 5);
3891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    _patch_op_imm(func_buf, p, k, 6, 5);
3892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    patch_op_imm(func_buf, p, l, 1, 5);
3893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    func = (void *)func_buf;
3894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    r14 = iargs[i];
3895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    r18 = 0;
3896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    __asm__ __volatile__ ("mtcr 18");
3897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    __asm__ __volatile__ ("mtxer 18");
3898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    (*func)();
3899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    __asm__ __volatile__ ("mfcr 18");
3900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    flags = r18;
3901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    __asm__ __volatile__ ("mfxer 18");
3902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    xer = r18;
3903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    res = r17;
3904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    vexxx_printf("%s %08x, %d, %d, %d => %08x (%08x %08x)\n",
3905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           name, iargs[i], j, k, l, res, flags, xer);
3906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                }
3907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                vexxx_printf("\n");
3908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            }
3909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf("\n");
3910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
3911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("\n");
3912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (i == 0)
3913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            i = 1;
3914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        else if (i == nb_iargs - 1)
3915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
3916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        else
3917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            i += 3;
3918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
3919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf("\n");
3920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void rlwnm_cb (const unsigned char *name, test_func_t func)
3923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t func_buf[2], *p;
3925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t res, flags, xer;
3926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i, j, k, l;
3927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (verbose > 1)
3929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "Test instruction %s\n", name);
3930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; i < nb_iargs; i++) {
3931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (j = 0; j < 64; j++) {
3932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            for (k = 0; k < 32; k++) {
3933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                for (l = 0; l < 32; l++) {
3934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    p = (void *)func;
3935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    func_buf[1] = p[1];
3936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    _patch_op_imm(func_buf, p, k, 6, 5);
3937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    patch_op_imm(func_buf, p, l, 1, 5);
3938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    func = (void *)func_buf;
3939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    r14 = iargs[i];
3940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    r15 = j;
3941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    r18 = 0;
3942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    __asm__ __volatile__ ("mtcr 18");
3943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    __asm__ __volatile__ ("mtxer 18");
3944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    (*func)();
3945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    __asm__ __volatile__ ("mfcr 18");
3946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    flags = r18;
3947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    __asm__ __volatile__ ("mfxer 18");
3948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    xer = r18;
3949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    res = r17;
3950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    vexxx_printf("%s %08x, %08x, %d, %d => %08x (%08x %08x)\n",
3951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           name, iargs[i], j, k, l, res, flags, xer);
3952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                }
3953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                vexxx_printf("\n");
3954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            }
3955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf("\n");
3956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
3957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("\n");
3958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
3959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf("\n");
3960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void srawi_cb (const unsigned char *name, test_func_t func)
3963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t func_buf[2], *p;
3965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t res, flags, xer;
3966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i, j;
3967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (verbose > 1)
3969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "Test instruction %s\n", name);
3970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; i < nb_iargs; i++) {
3971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (j = 0; j < 32; j++) {
3972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            p = (void *)func;
3973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            func_buf[1] = p[1];
3974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            patch_op_imm(func_buf, p, j, 11, 5);
3975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            func = (void *)func_buf;
3976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            r14 = iargs[i];
3977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            r18 = 0;
3978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mtcr 18");
3979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mtxer 18");
3980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (*func)();
3981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mfcr 18");
3982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            flags = r18;
3983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mfxer 18");
3984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            xer = r18;
3985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            res = r17;
3986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf("%s %08x, %d => %08x (%08x %08x)\n",
3987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   name, iargs[i], j, res, flags, xer);
3988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
3989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("\n");
3990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
3991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf("\n");
3992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef struct special_t special_t;
3995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct special_t {
3996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    const unsigned char *name;
3997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    void (*test_cb)(const unsigned char *name, test_func_t func);
3998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
3999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_special (special_t *table,
4001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                          const unsigned char *name, test_func_t func)
4002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    const unsigned char *tmp;
4004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i;
4005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (tmp = name; my_isspace(*tmp); tmp++)
4007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        continue;
4008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; table[i].name != NULL; i++) {
4009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 0
4010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "look for handler for '%s' (%s)\n", name,
4011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                table[i].name);
4012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
4013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (my_strcmp(table[i].name, tmp) == 0) {
4014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (*table[i].test_cb)(name, func);
4015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            return;
4016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
4017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
4018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf( "ERROR: no test found for op '%s'\n", name);
4019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic special_t special_int_ops[] = {
4022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 0
4023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "rlwimi", /* One register + 3 5 bits immediate arguments */
4025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &rlwi_cb,
4026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "rlwimi.", /* One register + 3 5 bits immediate arguments */
4029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &rlwi_cb,
4030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "rlwinm", /* One register + 3 5 bits immediate arguments */
4033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &rlwi_cb,
4034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "rlwinm.", /* One register + 3 5 bits immediate arguments */
4037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &rlwi_cb,
4038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "rlwnm",  /* Two registers + 3 5 bits immediate arguments */
4041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &rlwnm_cb,
4042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "rlwnm.",  /* Two registers + 3 5 bits immediate arguments */
4045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &rlwnm_cb,
4046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "srawi",  /* One register + 1 5 bits immediate arguments */
4049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &srawi_cb,
4050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "srawi.",  /* One register + 1 5 bits immediate arguments */
4053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &srawi_cb,
4054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
4056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 0
4057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mcrf",  /* 2 3 bits immediate arguments */
4059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mcrf_cb,
4060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mcrf",  /* 2 3 bits immediate arguments */
4063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mcrf_cb,
4064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
4066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        NULL,
4068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        NULL,
4069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
4071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_int_special (const unsigned char *name, test_func_t func)
4073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    test_special(special_int_ops, name, func);
4075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_loop_t int_loops[] = {
4078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_int_one_arg,
4079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_int_two_args,
4080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_int_three_args,
4081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_int_two_args,
4082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_int_one_reg_imm16,
4083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_int_one_reg_imm16,
4084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_int_special,
4085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
4086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
4088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_float_three_args (const unsigned char *name, test_func_t func)
4089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    double res;
4091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint64_t u0, u1, u2, ur;
4092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t flags;
4093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i, j, k;
4094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (verbose > 1)
4096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "Test instruction %s\n", name);
4097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; i < nb_fargs; i++) {
4098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (j = 0; j < nb_fargs; j++) {
4099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            for (k = 0;k < nb_fargs; k++) {
4100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                u0 = *(uint64_t *)(&fargs[i]);
4101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                u1 = *(uint64_t *)(&fargs[j]);
4102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                u2 = *(uint64_t *)(&fargs[k]);
4103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                f14 = fargs[i];
4104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                f15 = fargs[j];
4105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                f16 = fargs[k];
4106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                r18 = 0;
4107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mtcr 18");
4108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mtxer 18");
4109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                f18 = +0.0;
4110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mtfsf 0xFF, 18");
4111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                (*func)();
4112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mfcr 18");
4113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                flags = r18;
4114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                res = f17;
4115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                ur = *(uint64_t *)(&res);
4116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                vexxx_printf("%s %016llx, %016llx, %016llx => %016llx (%08x)\n",
4117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       name, u0, u1, u2, ur, flags);
4118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            }
4119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf("\n");
4120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
4121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("\n");
4122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
4123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf("\n");
4124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_float_two_args (const unsigned char *name, test_func_t func)
4127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    double res;
4129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint64_t u0, u1, ur;
4130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t flags;
4131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i, j;
4132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (verbose > 1)
4134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "Test instruction %s\n", name);
4135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; i < nb_fargs; i++) {
4136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (j = 0; j < nb_fargs; j++) {
4137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            u0 = *(uint64_t *)(&fargs[i]);
4138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            u1 = *(uint64_t *)(&fargs[j]);
4139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            f14 = fargs[i];
4140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            f15 = fargs[j];
4141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            r18 = 0;
4142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mtcr 18");
4143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mtxer 18");
4144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            f18 = +0.0;
4145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mtfsf 0xFF, 18");
4146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (*func)();
4147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            __asm__ __volatile__ ("mfcr 18");
4148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            flags = r18;
4149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            res = f17;
4150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            ur = *(uint64_t *)(&res);
4151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf("%s %016llx, %016llx => %016llx (%08x)\n",
4152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   name, u0, u1, ur, flags);
4153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
4154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("\n");
4155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
4156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf("\n");
4157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_float_one_arg (const unsigned char *name, test_func_t func)
4160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    double res;
4162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint64_t u0, ur;
4163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t flags;
4164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i;
4165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (verbose > 1)
4167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "Test instruction %s\n", name);
4168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; i < nb_fargs; i++) {
4169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        u0 = *(uint64_t *)(&fargs[i]);
4170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        f14 = fargs[i];
4171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        r18 = 0;
4172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        __asm__ __volatile__ ("mtcr 18");
4173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        __asm__ __volatile__ ("mtxer 18");
4174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        f18 = +0.0;
4175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        __asm__ __volatile__ ("mtfsf 0xFF, 18");
4176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        (*func)();
4177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        __asm__ __volatile__ ("mfcr 18");
4178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        flags = r18;
4179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        res = f17;
4180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        ur = *(uint64_t *)(&res);
4181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("%s %016llx => %016llx (%08x)\n", name, u0, ur, flags);
4182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
4183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf("\n");
4184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic special_t special_float_ops[] = {
4187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 0
4188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mffs",   /* One 5 bits immediate argument */
4190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mffs_cb,
4191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mffs.",   /* One 5 bits immediate argument */
4194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mffs_cb,
4195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mtfsb0", /* One 5 bits immediate argument */
4198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mffs_cb,
4199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mtfsb0.", /* One 5 bits immediate argument */
4202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mffs_cb,
4203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mtfsb1", /* One 5 bits immediate argument */
4206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mffs_cb,
4207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mtfsb1.", /* One 5 bits immediate argument */
4210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mffs_cb,
4211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mtfsf",  /* One register + 1 8 bits immediate argument */
4214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mtfsf_cb,
4215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mtfsf.",  /* One register + 1 8 bits immediate argument */
4218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mtfsf_cb,
4219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mtfsfi", /* One 5 bits argument + 1 5 bits argument */
4222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mtfsfi_cb,
4223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "mtfsfi.", /* One 5 bits argument + 1 5 bits argument */
4226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        &mtfsfi_cb,
4227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
4229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    {
4230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        NULL,
4231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        NULL,
4232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    },
4233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
4234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_float_special (const unsigned char *name, test_func_t func)
4236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    test_special(special_float_ops, name, func);
4238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic test_loop_t float_loops[] = {
4241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_float_one_arg,
4242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_float_two_args,
4243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_float_three_args,
4244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_float_two_args,
4245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    NULL,
4246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    NULL,
4247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    &test_float_special,
4248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
4249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
4250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC) /* XXX: TODO */
4253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (HAS_ALTIVEC) */
4254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (IS_PPC405)
4256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void test_ppc405 (const unsigned char *name, test_func_t func)
4257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    uint32_t res, flags, xer;
4259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i, j, k;
4260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (verbose > 1)
4262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf( "Test instruction %s\n", name);
4263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; i < nb_iargs; i++) {
4264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (j = 0; j < nb_iargs; j++) {
4265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            for (k = 0;k < nb_iargs; k++) {
4266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                r14 = iargs[i];
4267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                r15 = iargs[j];
4268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                 /* Beware: the third argument and the result
4269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  * are in the same register
4270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  */
4271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                r17 = iargs[k];
4272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                r18 = 0;
4273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mtcr 18");
4274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mtxer 18");
4275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                (*func)();
4276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mfcr 18");
4277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                flags = r18;
4278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                __asm__ __volatile__ ("mfxer 18");
4279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                xer = r18;
4280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                res = r17;
4281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                vexxx_printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n",
4282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       name, iargs[i], iargs[j], iargs[k], res, flags, xer);
4283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            }
4284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf("\n");
4285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
4286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("\n");
4287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
4288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf("\n");
4289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (IS_PPC405) */
4291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic int check_filter (unsigned char *filter)
4293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    unsigned char *c;
4295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int ret = 1;
4296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (filter != NULL) {
4298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        c = my_strchr(filter, '*');
4299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (c != NULL) {
4300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            *c = '\0';
4301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            ret = 0;
4302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
4303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
4304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    return ret;
4306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic int check_name (const unsigned char *name, const unsigned char *filter,
4309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       int exact)
4310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int nlen, flen;
4312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int ret = 0;
4313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (filter != NULL) {
4315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (; my_isspace(*name); name++)
4316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            continue;
4317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        FDPRINTF("Check '%s' againt '%s' (%s match)\n",
4318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                 name, filter, exact ? "exact" : "starting");
4319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        nlen = vexxx_strlen(name);
4320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        flen = vexxx_strlen(filter);
4321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (exact) {
4322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            if (nlen == flen && my_memcmp(name, filter, flen) == 0)
4323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                ret = 1;
4324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        } else {
4325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            if (flen <= nlen && my_memcmp(name, filter, flen) == 0)
4326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                ret = 1;
4327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
4328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    } else {
4329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        ret = 1;
4330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
4331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    return ret;
4333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void do_tests (int one_arg, int two_args, int three_args,
4336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      int arith, int logical, int compare,
4337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      int integer, int floats, int p405,
4338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      int altivec, int faltivec,
4339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      int cr, unsigned char *filter)
4340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (IS_PPC405)
4342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    test_loop_t tmpl;
4343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
4344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    test_loop_t *loop;
4345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    test_t *tests;
4346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int nb_args, type, family;
4347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int i, j, n;
4348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int exact;
4349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exact = check_filter(filter);
4351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    n = 0;
4352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; all_tests[i].name != NULL; i++) {
4353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        nb_args = all_tests[i].flags & PPC_NB_ARGS;
4354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* Check number of arguments */
4355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if ((nb_args == 1 && !one_arg) ||
4356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (nb_args == 2 && !two_args) ||
4357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (nb_args == 3 && !three_args))
4358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            continue;
4359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* Check instruction type */
4360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        type = all_tests[i].flags & PPC_TYPE;
4361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if ((type == PPC_ARITH && !arith) ||
4362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (type == PPC_LOGICAL && !logical) ||
4363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (type == PPC_COMPARE && !compare))
4364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            continue;
4365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* Check instruction family */
4366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        family = all_tests[i].flags & PPC_FAMILY;
4367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if ((family == PPC_INTEGER && !integer) ||
4368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (family == PPC_FLOAT && !floats) ||
4369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (family == PPC_405 && !p405) ||
4370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (family == PPC_ALTIVEC && !altivec) ||
4371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (family == PPC_FALTIVEC && !faltivec))
4372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            continue;
4373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* Check flags update */
4374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (((all_tests[i].flags & PPC_CR) && cr == 0) ||
4375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            (!(all_tests[i].flags & PPC_CR) && cr == 1))
4376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            continue;
4377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* All passed, do the tests */
4378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tests = all_tests[i].tests;
4379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* Select the test loop */
4380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        switch (family) {
4381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        case PPC_INTEGER:
4382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            loop = &int_loops[nb_args - 1];
4383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
4384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        case PPC_FLOAT:
4385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if !defined (NO_FLOAT)
4386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            loop = &float_loops[nb_args - 1];
4387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
4388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
4389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf( "Sorry. "
4390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    "PPC floating point instructions tests "
4391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    "are disabled on your host\n");
4392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* !defined (NO_FLOAT) */
4393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        case PPC_405:
4395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (IS_PPC405)
4396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            tmpl = &test_ppc405;
4397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            loop = &tmpl;
4398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
4399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
4400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf( "Sorry. "
4401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    "PPC405 instructions tests are disabled on your host\n");
4402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            continue;
4403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif /* defined (IS_PPC405) */
4404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        case PPC_ALTIVEC:
4405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
4406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 0
4407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            loop = &altivec_int_loops[nb_args - 1];
4408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
4409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
4410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf( "Sorry. "
4411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    "Altivec instructions tests are not yet implemented\n");
4412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            continue;
4413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
4414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
4415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf( "Sorry. "
4416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    "Altivec instructions tests are disabled on your host\n");
4417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            continue;
4418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
4419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        case PPC_FALTIVEC:
4420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined (HAS_ALTIVEC)
4421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 0
4422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            loop = &altivec_float_loops[nb_args - 1];
4423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            break;
4424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
4425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf( "Sorry. "
4426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    "Altivec instructions tests are not yet implemented\n");
4427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            continue;
4428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
4429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
4430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf( "Sorry. "
4431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    "Altivec float instructions tests "
4432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    "are disabled on your host\n");
4433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
4434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            continue;
4435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        default:
4436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf("ERROR: unknown insn family %08x\n", family);
4437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            continue;
4438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
4439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (verbose > 0)
4440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            vexxx_printf( "%s:\n", all_tests[i].name);
4441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        for (j = 0; tests[j].name != NULL; j++) {
4442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            if (check_name(tests[j].name, filter, exact))
4443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                (*loop)(tests[j].name, tests[j].func);
4444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            n++;
4445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
4446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        vexxx_printf("\n");
4447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
4448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf( "All done. Tested %d different instructions\n", n);
4449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 0 // unused
4452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void usage (void)
4453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    vexxx_printf(
4455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "test-ppc [-1] [-2] [-3] [-*] [-t <type>] [-f <family>] [-u] "
4456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "[-n <filter>] [-x] [-h]\n"
4457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t-1: test opcodes with one argument\n"
4458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t-2: test opcodes with two arguments\n"
4459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t-3: test opcodes with three arguments\n"
4460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t-*: launch test without checking the number of arguments\n"
4461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t-t: launch test for instructions of type <type>\n"
4462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t    recognized types:\n"
4463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t\tarith (or a)\n"
4464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t\tlogical (or l)\n"
4465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t\tcompare (or c)\n"
4466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t-f: launch test for instructions of family <family>\n"
4467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t    recognized families:\n"
4468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t\tinteger (or i)\n"
4469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t\tfloat (or f)\n"
4470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t\tppc405 (or mac)\n"
4471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t\taltivec (or a)\n"
4472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t-u: test instructions that update flags\n"
4473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t-n: filter instructions with <filter>\n"
4474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t    <filter> can be in two forms:\n"
4475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t\tname  : filter functions that exactly match <name>\n"
4476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t\tname* : filter functions that start with <name>\n"
4477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            "\t-h: print this help\n"
4478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            );
4479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
4481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint _main (int argc, char **argv)
4483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    unsigned char /* *tmp, */ *filter = NULL;
4485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int one_arg = 0, two_args = 0, three_args = 0;
4486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int arith = 0, logical = 0, compare = 0;
4487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int integer = 0, floats = 0, p405 = 0, altivec = 0, faltivec = 0;
4488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int cr = -1;
4489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //int c;
4490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //    while ((c = getopt(argc, argv, "123t:f:n:uvh")) != -1) {
4492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        switch (c) {
4493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        case '1':
4494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            one_arg = 1;
4495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            break;
4496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        case '2':
4497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            two_args = 1;
4498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            break;
4499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        case '3':
4500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            three_args = 1;
4501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            break;
4502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        case 't':
4503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            tmp = optarg;
4504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            if (my_strcmp(tmp, "arith") == 0 || my_strcmp(tmp, "a") == 0) {
4505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //                arith = 1;
4506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            } else if (my_strcmp(tmp, "logical") == 0 || my_strcmp(tmp, "l") == 0) {
4507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //                logical = 1;
4508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            } else if (my_strcmp(tmp, "compare") == 0 || my_strcmp(tmp, "c") == 0) {
4509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //                compare = 1;
4510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            } else {
4511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //                goto bad_arg;
4512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            }
4513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            break;
4514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        case 'f':
4515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            tmp = optarg;
4516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            if (my_strcmp(tmp, "integer") == 0 || my_strcmp(tmp, "i") == 0) {
4517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //                integer = 1;
4518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            } else if (my_strcmp(tmp, "float") == 0 || my_strcmp(tmp, "f") == 0) {
4519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //                floats = 1;
4520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            } else if (my_strcmp(tmp, "ppc405") == 0 || my_strcmp(tmp, "mac") == 0) {
4521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //                p405 = 1;
4522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            } else if (my_strcmp(tmp, "altivec") == 0 || my_strcmp(tmp, "a") == 0) {
4523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //                altivec = 1;
4524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //                faltivec = 1;
4525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            } else {
4526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //                goto bad_arg;
4527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            }
4528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            break;
4529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        case 'n':
4530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            filter = optarg;
4531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            break;
4532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        case 'u':
4533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            cr = 1;
4534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            break;
4535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        case 'h':
4536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            usage();
4537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            return 0;
4538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        case 'v':
4539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            verbose++;
4540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            break;
4541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        default:
4542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            usage();
4543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            vexxx_printf( "Unknown argument: '%c'\n", c);
4544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            return 1;
4545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        bad_arg:
4546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            usage();
4547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            vexxx_printf( "Bad argument for '%c': '%s'\n", c, tmp);
4548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //            return 1;
4549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        }
4550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //    }
4551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //    if (argc != optind) {
4552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        usage();
4553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        vexxx_printf( "Bad number of arguments\n");
4554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //        return 1;
4555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    //    }
4556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (one_arg == 0 && two_args == 0 && three_args == 0) {
4558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        one_arg = 1;
4559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        two_args = 1;
4560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        three_args = 1;
4561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
4562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (arith == 0 && logical == 0 && compare == 0) {
4563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        arith = 1;
4564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        logical = 1;
4565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        compare = 1;
4566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
4567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (integer == 0 && floats == 0 && altivec == 0 && faltivec == 0 &&
4568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        p405 == 0) {
4569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        integer = 1;
4570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        floats = 1;
4571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        altivec = 1;
4572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        faltivec = 1;
4573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        p405 = 1;
4574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
4575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (cr == -1)
4576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        cr = 2;
4577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    build_iargs_table();
4578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    build_fargs_table();
4579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    build_ii16_table();
4580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 1
4582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    one_arg=1;
4583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    two_args=1;
4584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    three_args=1;
4585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    arith=1;
4587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    logical=1;
4588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    compare=1;
4589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    integer=1;
4591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    floats=0;
4592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    p405=0;
4594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    altivec=0;
4595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    faltivec=0;
4596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
4597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    do_tests(one_arg, two_args, three_args,
4599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             arith, logical, compare,
4600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             integer, floats, p405, altivec, faltivec,
4601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             cr, filter);
4602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    return 0;
4604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid entry ( HWord(*service)(HWord,HWord) )
4608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   char* argv[2] = { NULL, NULL };
4610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   serviceFn = service;
4611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   _main(0, argv);
4612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   (*service)(0,0);
4613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4614