1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 #include <mach.h> 5 #include "arm.h" 6 7 void unimp(ulong); 8 void Ifcmp(ulong); 9 void Ifdiv(ulong); 10 void Ifmul(ulong); 11 void Ifadd(ulong); 12 void Ifsub(ulong); 13 void Ifmov(ulong); 14 void Icvtd(ulong); 15 void Icvtw(ulong); 16 void Icvts(ulong); 17 void Ifabs(ulong); 18 void Ifneg(ulong); 19 20 Inst cop1[] = { 21 { Ifadd, "add.f", Ifloat }, 22 { Ifsub, "sub.f", Ifloat }, 23 { Ifmul, "mul.f", Ifloat }, 24 { Ifdiv, "div.f", Ifloat }, 25 { unimp, "", }, 26 { Ifabs, "abs.f", Ifloat }, 27 { Ifmov, "mov.f", Ifloat }, 28 { Ifneg, "neg.f", Ifloat }, 29 { unimp, "", }, 30 { unimp, "", }, 31 { unimp, "", }, 32 { unimp, "", }, 33 { unimp, "", }, 34 { unimp, "", }, 35 { unimp, "", }, 36 { unimp, "", }, 37 { unimp, "", }, 38 { unimp, "", }, 39 { unimp, "", }, 40 { unimp, "", }, 41 { unimp, "", }, 42 { unimp, "", }, 43 { unimp, "", }, 44 { unimp, "", }, 45 { unimp, "", }, 46 { unimp, "", }, 47 { unimp, "", }, 48 { unimp, "", }, 49 { unimp, "", }, 50 { unimp, "", }, 51 { unimp, "", }, 52 { unimp, "", }, 53 { Icvts, "cvt.s", Ifloat }, 54 { Icvtd, "cvt.d", Ifloat }, 55 { unimp, "", }, 56 { unimp, "", }, 57 { Icvtw, "cvt.w", Ifloat }, 58 { unimp, "", }, 59 { unimp, "", }, 60 { unimp, "", }, 61 { unimp, "", }, 62 { unimp, "", }, 63 { unimp, "", }, 64 { unimp, "", }, 65 { unimp, "", }, 66 { unimp, "", }, 67 { unimp, "", }, 68 { unimp, "", }, 69 { Ifcmp, "c.f", Ifloat }, 70 { Ifcmp, "c.un", Ifloat }, 71 { Ifcmp, "c.eq", Ifloat }, 72 { Ifcmp, "c.ueq", Ifloat }, 73 { Ifcmp, "c.olt", Ifloat }, 74 { Ifcmp, "c.ult", Ifloat }, 75 { Ifcmp, "c.ole", Ifloat }, 76 { Ifcmp, "c.ule", Ifloat }, 77 { Ifcmp, "c,sf", Ifloat }, 78 { Ifcmp, "c.ngle",Ifloat }, 79 { Ifcmp, "c.seq", Ifloat }, 80 { Ifcmp, "c.ngl", Ifloat }, 81 { Ifcmp, "c.lt", Ifloat }, 82 { Ifcmp, "c.nge", Ifloat }, 83 { Ifcmp, "c.le", Ifloat }, 84 { Ifcmp, "c.ngt", Ifloat }, 85 { 0 } 86 }; 87 88 void 89 unimp(ulong inst) 90 { 91 print("op %d\n", inst&0x3f); 92 Bprint(bioout, "Unimplemented floating point Trap IR %.8lux\n", inst); 93 longjmp(errjmp, 0); 94 } 95 96 void 97 inval(ulong inst) 98 { 99 Bprint(bioout, "Invalid Operation Exception IR %.8lux\n", inst); 100 longjmp(errjmp, 0); 101 } 102 103 void 104 ifmt(int r) 105 { 106 Bprint(bioout, "Invalid Floating Data Format f%d pc 0x%lux\n", r, reg.r[15]); 107 longjmp(errjmp, 0); 108 } 109 110 void 111 floatop(int dst, int s1, int s2) 112 { 113 } 114 115 void 116 doubop(int dst, int s1, int s2) 117 { 118 } 119 120 void 121 Iswc1(ulong inst) 122 { 123 } 124 125 void 126 Ifsub(ulong ir) 127 { 128 } 129 130 void 131 Ifmov(ulong ir) 132 { 133 } 134 135 void 136 Ifabs(ulong ir) 137 { 138 } 139 140 void 141 Ifneg(ulong ir) 142 { 143 } 144 145 void 146 Icvtd(ulong ir) 147 { 148 } 149 150 void 151 Icvts(ulong ir) 152 { 153 } 154 155 void 156 Icvtw(ulong ir) 157 { 158 } 159 160 void 161 Ifadd(ulong ir) 162 { 163 } 164 165 void 166 Ifmul(ulong ir) 167 { 168 } 169 170 void 171 Ifdiv(ulong ir) 172 { 173 } 174 175 void 176 Ilwc1(ulong inst) 177 { 178 } 179 180 void 181 Ibcfbct(ulong inst) 182 { 183 } 184 185 void 186 Imtct(ulong ir) 187 { 188 } 189 190 void 191 Imfcf(ulong ir) 192 { 193 } 194 195 void 196 Icop1(ulong ir) 197 { 198 } 199 200 void 201 Ifcmp(ulong ir) 202 { 203 } 204