1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <assert.h> 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <malloc.h> 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int UInt; 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long long int ULong; 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown struct { 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double fres; 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown UInt cr; 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown UInt fpscr; 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Result; 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void set_NEAREST ( void ) { 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__("mtfsb0 30 ; mtfsb0 31"); 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void set_ZERO ( void ) { 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__("mtfsb0 30 ; mtfsb1 31"); 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void set_PosINF ( void ) { 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__("mtfsb1 30 ; mtfsb0 31"); 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void set_NegINF ( void ) { 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__("mtfsb1 30 ; mtfsb1 31"); 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic ULong double_as_ULong ( double d ) 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown union { double dd; ULong ll; } u; 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(sizeof(u) == 8); 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown u.dd = d; 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return u.ll; 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic ULong round_with_mask ( ULong x, ULong mask ) 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (mask == 1) { 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown switch (x & 1) { 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 0: return x; 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 1: return x+1; 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(0); 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (mask == 3) { 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown switch (x & 3) { 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 0: return x; 53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 1: return x-1; 54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 2: return x+2; 55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 3: return x+1; 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(0); 58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (mask == 7) { 61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown switch (x & 7) { 62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 0: return x; 63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 1: return x-1; 64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 2: return x-2; 65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 3: return x-3; 66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 4: return x+4; 67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 5: return x+3; 68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 6: return x+2; 69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 7: return x+1; 70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(0); 72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (mask == 15) { 75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown switch (x & 15) { 76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 0: return x; 77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 1: return x-1; 78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 2: return x-2; 79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 3: return x-3; 80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 4: return x-4; 81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 5: return x-5; 82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 6: return x-6; 83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 7: return x-7; 84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 8: return x+8; 85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 9: return x+7; 86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 10: return x+6; 87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 11: return x+5; 88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 12: return x+4; 89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 13: return x+3; 90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 14: return x+2; 91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown case 15: return x+1; 92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(0); 94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(0); 97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void showResult ( Result r, ULong hideMask ) 100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* hidemask should have 1 for every result bit we **don't** 102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown want to show. viz should be all zeroes normally. */ 103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0 104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%016llx cr1 0x%01x fprf 0x%02x)", 105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double_as_ULong(r.fres) & ~hidemask, 106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (r.cr >> 24) & 0xF, (r.fpscr >> 12) & 0x1F); 107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("(%016llx cr1 ... fprf ...)", 109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown (hideMask == 0x1 || hideMask == 0x3 || hideMask == 0x7) 110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ? round_with_mask( double_as_ULong(r.fres), hideMask ) 111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : double_as_ULong(r.fres) & ~hideMask 112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Give an insn string such as "fmadd %%f4, %%f1,%%f2,%%f3". Args are 118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown in f1, f2, f3, and result should go in f4. */ 119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define INSN(name,insn) \ 120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown \ 121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static Result insn_##name ( double arg1, double arg2, double arg3 ) \ 122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { \ 123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown struct { \ 124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* 0 */ double a1; \ 125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* 8 */ double a2; \ 126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* 16 */ double a3; \ 127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* 24 */ double res; \ 128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* 32 */ UInt fpscr_after; \ 129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* 36 */ UInt cr_after; \ 130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } foo; \ 131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(sizeof(foo) == 40); \ 132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown foo.a1 = foo.a2 = foo.a3 = foo.res = 0; \ 133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown foo.fpscr_after = foo.cr_after = 0; \ 134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown foo.a1 = arg1; \ 135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown foo.a2 = arg2; \ 136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown foo.a3 = arg3; \ 137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__( \ 138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "lfd %%f1, 0(%0)\n\t" /* a1 */ \ 139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "lfd %%f2, 8(%0)\n\t" /* a2 */ \ 140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "lfd %%f3, 16(%0)\n\t" /* a3 */ \ 141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown insn "\n\t" \ 142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "stfd %%f4, 24(%0)\n\t" /* res */ \ 143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mffs %%f4\n\t" \ 144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "addi %0,%0,32\n\t" \ 145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "stfiwx %%f4, %%r0,%0\n\t" /* fpscr_after. r0 reads as zero */ \ 146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "addi %0,%0,-32\n\t" \ 147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "mfcr %%r31\n\t" \ 148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "stw %%r31, 36(%0)" /* cr_after */ \ 149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : /*out*/ \ 150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : /*in*/ "b" (&foo.a1) \ 151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : /*trash*/ "memory","cc", "fr1","fr2","fr3","fr4", "r31" \ 152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); \ 153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown { Result result; \ 154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown result.fres = foo.res; \ 155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown result.cr = foo.cr_after; \ 156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown result.fpscr = foo.fpscr_after; \ 157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return result; \ 158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } \ 159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fabs, "fabs %%f4, %%f1"); 162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fabs_, "fabs. %%f4, %%f1"); 163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fnabs, "fnabs %%f4, %%f1"); 165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fnabs_, "fnabs. %%f4, %%f1"); 166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fadd, "fadd %%f4, %%f1,%%f2"); 168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fadd_, "fadd. %%f4, %%f1,%%f2"); 169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fadds, "fadds %%f4, %%f1,%%f2"); 171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fadds_, "fadds. %%f4, %%f1,%%f2"); 172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fcfid, "fcfid %%f4, %%f1"); 174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fcfid_, "fcfid. %%f4, %%f1"); 175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fctid, "fctid %%f4, %%f1"); 177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fctid_, "fctid. %%f4, %%f1"); 178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fctidz, "fctidz %%f4, %%f1"); 180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fctidz_, "fctidz. %%f4, %%f1"); 181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fctiw, "fctiw %%f4, %%f1"); 183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fctiw_, "fctiw. %%f4, %%f1"); 184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fctiwz, "fctiwz %%f4, %%f1"); 186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fctiwz_, "fctiwz. %%f4, %%f1"); 187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fdiv, "fdiv %%f4, %%f1,%%f2"); 189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fdiv_, "fdiv. %%f4, %%f1,%%f2"); 190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fdivs, "fdivs %%f4, %%f1,%%f2"); 192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fdivs_, "fdivs. %%f4, %%f1,%%f2"); 193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmadd, "fmadd %%f4, %%f1,%%f2,%%f3"); 195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmadd_, "fmadd. %%f4, %%f1,%%f2,%%f3"); 196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmadds, "fmadds %%f4, %%f1,%%f2,%%f3"); 198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmadds_, "fmadds. %%f4, %%f1,%%f2,%%f3"); 199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmr, "fmr %%f4, %%f1"); 201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmr_, "fmr. %%f4, %%f1"); 202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmsub, "fmsub %%f4, %%f1,%%f2,%%f3"); 204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmsub_, "fmsub. %%f4, %%f1,%%f2,%%f3"); 205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmsubs, "fmsubs %%f4, %%f1,%%f2,%%f3"); 207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmsubs_, "fmsubs. %%f4, %%f1,%%f2,%%f3"); 208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmul, "fmul %%f4, %%f1,%%f2"); 210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmul_, "fmul. %%f4, %%f1,%%f2"); 211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmuls, "fmuls %%f4, %%f1,%%f2"); 213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fmuls_, "fmuls. %%f4, %%f1,%%f2"); 214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fneg, "fneg %%f4, %%f1"); 216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fneg_, "fneg. %%f4, %%f1"); 217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fnmadd, "fnmadd %%f4, %%f1,%%f2,%%f3"); 219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fnmadd_, "fnmadd. %%f4, %%f1,%%f2,%%f3"); 220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fnmadds, "fnmadds %%f4, %%f1,%%f2,%%f3"); 222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fnmadds_, "fnmadds. %%f4, %%f1,%%f2,%%f3"); 223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fnmsub, "fnmsub %%f4, %%f1,%%f2,%%f3"); 225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fnmsub_, "fnmsub. %%f4, %%f1,%%f2,%%f3"); 226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fnmsubs, "fnmsubs %%f4, %%f1,%%f2,%%f3"); 228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fnmsubs_, "fnmsubs. %%f4, %%f1,%%f2,%%f3"); 229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fre, "fre %%f4, %%f1"); 231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fre_, "fre. %%f4, %%f1"); 232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fres, "fres %%f4, %%f1"); 234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fres_, "fres. %%f4, %%f1"); 235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(frsqrte, "frsqrte %%f4, %%f1"); 237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(frsqrte_, "frsqrte. %%f4, %%f1"); 238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//INSN(frsqrtes, "frsqrtes %%f4, %%f1"); 240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//INSN(frsqrtes_, "frsqrtes. %%f4, %%f1"); 241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(frsp, "frsp %%f4, %%f1"); 243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(frsp_, "frsp. %%f4, %%f1"); 244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fsel, "fsel %%f4, %%f1,%%f2,%%f3"); 246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fsel_, "fsel. %%f4, %%f1,%%f2,%%f3"); 247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fsqrt, "fsqrt %%f4, %%f1"); 249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fsqrt_, "fsqrt. %%f4, %%f1"); 250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fsqrts, "fsqrts %%f4, %%f1"); 252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fsqrts_, "fsqrts. %%f4, %%f1"); 253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fsub, "fsub %%f4, %%f1,%%f2"); 255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fsub_, "fsub. %%f4, %%f1,%%f2"); 256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fsubs, "fsubs %%f4, %%f1,%%f2"); 258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownINSN(fsubs_, "fsubs. %%f4, %%f1,%%f2"); 259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_1_unary ( char* name, 263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Result(*f)(double,double,double), 264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double a1, 265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ULong hideMask ) 266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Result r; 268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%8s: %016llx (%e)\n", name, double_as_ULong(a1), a1); 269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_NEAREST(); 270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1, 0.0,0.0); 271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" near "); showResult(r,hideMask); printf("\n"); 272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_ZERO(); 273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1, 0.0,0.0); 274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" zero "); showResult(r,hideMask); printf("\n"); 275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_PosINF(); 276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1, 0.0,0.0); 277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" +inf "); showResult(r,hideMask); printf("\n"); 278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_NegINF(); 279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1, 0.0,0.0); 280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" -inf "); showResult(r,hideMask); printf("\n"); 281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_1_binary ( char* name, 284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Result(*f)(double,double,double), 285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double a1, double a2, 286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ULong hideMask ) 287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Result r; 289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%8s: %016llx %016llx\n", name, double_as_ULong(a1), 290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double_as_ULong(a2)); 291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_NEAREST(); 292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1,a2, 0.0); 293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" near "); showResult(r,hideMask); printf("\n"); 294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_ZERO(); 295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1,a2, 0.0); 296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" zero "); showResult(r,hideMask); printf("\n"); 297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_PosINF(); 298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1,a2, 0.0); 299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" +inf "); showResult(r,hideMask); printf("\n"); 300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_NegINF(); 301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1,a2, 0.0); 302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" -inf "); showResult(r,hideMask); printf("\n"); 303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_1_ternary ( char* name, 306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Result(*f)(double,double,double), 307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double a1, double a2, double a3, 308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ULong hideMask ) 309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Result r; 311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%8s: %016llx %016llx %016llx\n", 312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown name, double_as_ULong(a1), 313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double_as_ULong(a2), double_as_ULong(a3)); 314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_NEAREST(); 315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1,a2,a3); 316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" near "); showResult(r,hideMask); printf("\n"); 317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_ZERO(); 318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1,a2,a3); 319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" zero "); showResult(r,hideMask); printf("\n"); 320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_PosINF(); 321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1,a2,a3); 322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" +inf "); showResult(r,hideMask); printf("\n"); 323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown set_NegINF(); 324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown r = f(a1,a2,a3); 325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" -inf "); showResult(r,hideMask); printf("\n"); 326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_N_unary ( char* name, 329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Result(*f)(double,double,double), 330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double* args, 331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int nargs, 332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ULong hideMask ) 333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 0; i < nargs; i++) { 336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_1_unary( name, f, args[i], hideMask ); 337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_N_binary ( char* name, 341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Result(*f)(double,double,double), 342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double* args, 343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int nargs, 344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ULong hideMask ) 345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j; 347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 0; i < nargs; i++) { 348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j = 0; j < nargs; j++) { 349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_1_binary( name, f, args[i], args[j], hideMask ); 350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_N_ternary ( char* name, 355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Result(*f)(double,double,double), 356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double* args, 357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int nargs, 358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ULong hideMask ) 359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, j, k; 361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 0; i < nargs; i++) { 362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (j = 0; j < nargs; j++) { 363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (k = 0; k < nargs; k++) { 364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_1_ternary( name, f, args[i], args[j], args[k], hideMask ); 365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void ) 371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown const ULong SHOW_ALL = 0; 373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int nargs = 21; 375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int nMacArgs = 11; 376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double* args = malloc(nargs * sizeof(double)); 378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double* macArgs = malloc(nMacArgs * sizeof(double)); 379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[0] = 0.0; 381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[1] = 1.0 / 0.0; // inf 382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[2] = -args[1]; // -inf 383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[3] = args[2]/args[2]; // nan 384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[4] = -args[3]; // -nan 385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[5] = -5e100; 386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[6] = -5e20; 387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[7] = -501.0; 388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[8] = -6.0; 389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[9] = -1.0; 390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[10] = -2e-20; 391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[11] = -2e-200; 392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[12] = 2e-200; 393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[13] = 2e-20; 394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[14] = 1.0; 395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[15] = 6.0; 396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[16] = 501.0; 397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[17] = 5e20; 398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[18] = 5e100; 399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[19] = 1.23e+5; 400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown args[20] = 1.23e+14; 401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0 403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[0] = 0.0; 404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[1] = -5e100; 405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[2] = -5e20; 406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[3] = -501.0; 407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[4] = -6.0; 408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[5] = -1.0; 409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[6] = -2e-20; 410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[7] = -2e-200; 411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[8] = 2e-200; 412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[9] = 2e-20; 413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[10] = 1.0; 414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[11] = 6.0; 415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[12] = 501.0; 416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[13] = 5e20; 417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[14] = 5e100; 418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[15] = 1.23e+5; 419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[16] = 1.23e+14; 420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //macArgs[17] = args[3]; // nan 422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //macArgs[18] = -args[3]; // -nan 423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[0] = 0.0; 426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[1] = 1.0; 427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[2] = 1.0 + (1.0/7.0); 428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[3] = 6.01; 429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[4] = 501.0; 430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[5] = 31415927.0; 431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[6] = - 1.0; 432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[7] = - (1.0 + (1.0/7.0)); 433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[8] = - 6.01; 434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[9] = - 501.0; 435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown macArgs[10] = - 31415927.0; 436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fmr", insn_fmr, args, nargs, SHOW_ALL); 439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fmr_", insn_fmr_, args, nargs, SHOW_ALL); 440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fneg", insn_fneg, args, nargs, SHOW_ALL); 442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fneg_", insn_fneg_, args, nargs, SHOW_ALL); 443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fabs", insn_fabs, args, nargs, SHOW_ALL); 445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fabs_", insn_fabs_, args, nargs, SHOW_ALL); 446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fnabs", insn_fnabs, args, nargs, SHOW_ALL); 448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fnabs_", insn_fnabs_, args, nargs, SHOW_ALL); 449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fadd", insn_fadd, args, nargs, SHOW_ALL); 452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fadd_", insn_fadd_, args, nargs, SHOW_ALL); 453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fadds", insn_fadds, args, nargs, SHOW_ALL); 455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fadds_", insn_fadds_, args, nargs, SHOW_ALL); 456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fdiv", insn_fdiv, args, nargs, SHOW_ALL); 458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fdiv_", insn_fdiv_, args, nargs, SHOW_ALL); 459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fdivs", insn_fdivs, args, nargs, SHOW_ALL); 461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fdivs_", insn_fdivs_, args, nargs, SHOW_ALL); 462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fmul", insn_fmul, args, nargs, SHOW_ALL); 464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fmul_", insn_fmul_, args, nargs, SHOW_ALL); 465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fmuls", insn_fmuls, args, nargs, SHOW_ALL); 467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fmuls_", insn_fmuls_, args, nargs, SHOW_ALL); 468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fsub", insn_fsub, args, nargs, SHOW_ALL); 470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fsub_", insn_fsub_, args, nargs, SHOW_ALL); 471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fsubs", insn_fsubs, args, nargs, SHOW_ALL); 473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_binary("fsubs_", insn_fsubs_, args, nargs, SHOW_ALL); 474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fcfid, SHOW_ALL); 476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fcfid_, SHOW_ALL); 477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fctid, SHOW_ALL); 479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fctid_, SHOW_ALL); 480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fctidz, SHOW_ALL); 482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fctidz_, SHOW_ALL); 483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fctiw", insn_fctiw, args, nargs, 0xFFFFFFFF00000000ULL); 485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fctiw_", insn_fctiw_, args, nargs, 0xFFFFFFFF00000000ULL); 486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fctiwz", insn_fctiwz, args, nargs, 0xFFFFFFFF00000000ULL); 488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fctiwz_", insn_fctiwz_, args, nargs, 0xFFFFFFFF00000000ULL); 489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fmadd", insn_fmadd, macArgs, nMacArgs, SHOW_ALL); 491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fmadd_", insn_fmadd_, macArgs, nMacArgs, SHOW_ALL); 492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fmadds", insn_fmadds, macArgs, nMacArgs, SHOW_ALL); 494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fmadds_", insn_fmadds_, macArgs, nMacArgs, SHOW_ALL); 495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fmsub", insn_fmsub, macArgs, nMacArgs, SHOW_ALL); 497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fmsub_", insn_fmsub_, macArgs, nMacArgs, SHOW_ALL); 498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fmsubs", insn_fmsubs, macArgs, nMacArgs, SHOW_ALL); 500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fmsubs_", insn_fmsubs_, macArgs, nMacArgs, SHOW_ALL); 501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fnmadd", insn_fnmadd, macArgs, nMacArgs, SHOW_ALL); 503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fnmadd_", insn_fnmadd_, macArgs, nMacArgs, SHOW_ALL); 504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fnmadds", insn_fnmadds, macArgs, nMacArgs, SHOW_ALL); 506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fnmadds_", insn_fnmadds_, macArgs, nMacArgs, SHOW_ALL); 507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fnmsub", insn_fnmsub, macArgs, nMacArgs, SHOW_ALL); 509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fnmsub_", insn_fnmsub_, macArgs, nMacArgs, SHOW_ALL); 510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fnmsubs", insn_fnmsubs, macArgs, nMacArgs, SHOW_ALL); 512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fnmsubs_", insn_fnmsubs_, macArgs, nMacArgs, SHOW_ALL); 513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fre, SHOW_ALL); 515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fre_, SHOW_ALL); 516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fres", insn_fres, args, nargs, 0x000001FFFFFFFFFFULL); 518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("fres_", insn_fres_, args, nargs, 0x000001FFFFFFFFFFULL); 519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("frsqrte", insn_frsqrte, args, nargs, SHOW_ALL); 521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("frsqrte_", insn_frsqrte_, args, nargs, SHOW_ALL); 522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do_N_unary("frsqrtes", insn_frsqrtes, args, nargs, SHOW_ALL); 524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // do_N_unary("frsqrtes_", insn_frsqrtes_, args, nargs, SHOW_ALL); 525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("frsp", insn_frsp, args, nargs, SHOW_ALL); 527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_unary("frsp_", insn_frsp_, args, nargs, SHOW_ALL); 528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fsel", insn_fsel, args, nargs, SHOW_ALL); 530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_N_ternary("fsel_", insn_fsel_, args, nargs, SHOW_ALL); 531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fsqrt, SHOW_ALL); 533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fsqrt_, SHOW_ALL); 534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fsqrts, SHOW_ALL); 536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown //do_N_unary(fsqrts_, SHOW_ALL); 537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 540