1 1.1 christos // data cache pre-fetch: 2 1.1 christos 3 1.1 christos // 1111 1001 1010 0110 Rm.. 0000; dcpf (Rm) 4 1.1 christos 8.0xf9+8.0xa6+4.RN2,4.0000:D1a:::dcpf 5 1.1 christos "dcpf" 6 1.1 christos *am33_2 7 1.1 christos { 8 1.1 christos int srcreg; 9 1.1 christos 10 1.1 christos PC = cia; 11 1.1 christos 12 1.1 christos srcreg = translate_rreg (SD_, RN2); 13 1.1 christos load_word (State.regs[srcreg]); 14 1.1 christos } 15 1.1 christos 16 1.1 christos // 1111 1001 1010 0111 0000 0000; dcpf (sp) 17 1.1 christos 8.0xf9+8.0xa7+8.0x00:D1b:::dcpf 18 1.1 christos "dcpf" 19 1.1 christos *am33_2 20 1.1 christos { 21 1.1 christos PC = cia; 22 1.1 christos 23 1.1 christos load_word (SP); 24 1.1 christos } 25 1.1 christos 26 1.1 christos // 1111 1011 1010 0110 Ri.. Rm.. 0000 0000; dcpf (Ri,Rm) 27 1.1 christos 8.0xfb+8.0xa6+4.RN2,4.RN0+8.0x00:D2a:::dcpf 28 1.1 christos "dcpf" 29 1.1 christos *am33_2 30 1.1 christos { 31 1.1 christos int srci, srcm; 32 1.1 christos 33 1.1 christos PC = cia; 34 1.1 christos 35 1.1 christos srci = translate_rreg (SD_, RN2); 36 1.1 christos srcm = translate_rreg (SD_, RN0); 37 1.1 christos 38 1.1 christos load_word (State.regs[srci] + State.regs[srcm]); 39 1.1 christos } 40 1.1 christos 41 1.1 christos // 1111 1011 1010 0111 Rm.. 0000 IMM8; dcpf (d8,Rm) 42 1.1 christos 8.0xfb+8.0xa7+4.RN2,4.0000+8.IMM8:D2b:::dcpf 43 1.1 christos "dcpf" 44 1.1 christos *am33_2 45 1.1 christos { 46 1.1 christos int srcreg; 47 1.1 christos 48 1.1 christos PC = cia; 49 1.1 christos 50 1.1 christos srcreg = translate_rreg (SD_, RN2); 51 1.1 christos 52 1.1 christos load_word (State.regs[srcreg] + EXTEND8 (IMM8)); 53 1.1 christos } 54 1.1 christos 55 1.1 christos // 1111 1101 1010 0111 Rm.. 0000 IMM24; dcpf (d24,Rm) 56 1.1 christos 8.0xfd+8.0xa7+4.RN2,4.0000+8.IMM24A+8.IMM24B+8.IMM24C:D4a:::dcpf 57 1.1 christos "dcpf" 58 1.1 christos *am33_2 59 1.1 christos { 60 1.1 christos int srcreg; 61 1.1 christos 62 1.1 christos PC = cia; 63 1.1 christos 64 1.1 christos srcreg = translate_rreg (SD_, RN2); 65 1.1 christos 66 1.1 christos load_word (State.regs[srcreg] + EXTEND24 (FETCH24 (IMM24A, 67 1.1 christos IMM24B, IMM24C))); 68 1.1 christos } 69 1.1 christos 70 1.1 christos // 1111 1110 0100 0110 Rm.. 0000 IMM32; dcpf (d32,Rm) 71 1.1 christos 8.0xfe+8.0x46+4.RN2,4.0000+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5a:::dcpf 72 1.1 christos "dcpf" 73 1.1 christos *am33_2 74 1.1 christos { 75 1.1 christos int srcreg; 76 1.1 christos 77 1.1 christos PC = cia; 78 1.1 christos 79 1.1 christos srcreg = translate_rreg (SD_, RN2); 80 1.1 christos 81 1.1 christos load_word (State.regs[srcreg] 82 1.1 christos + FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D)); 83 1.1 christos } 84 1.1 christos 85 1.1 christos // bit operations with imm8,(abs16) addressing mode: 86 1.1 christos 87 1.1 christos // 1111 1110 1000 0010 ABS16 IMM8; btst imm8,(abs16) 88 1.1 christos 8.0xfe+8.0x82+8.IMM16A+8.IMM16B+8.IMM8:D3:::btst 89 1.1 christos "btst" 90 1.1 christos *am33_2 91 1.1 christos { 92 1.1 christos PC = cia; 93 1.1 christos genericBtst (IMM8, FETCH16 (IMM16A, IMM16B)); 94 1.1 christos } 95 1.1 christos 96 1.1 christos // 1111 1110 1000 0000 ABS16 IMM8; bset imm8,(abs16) 97 1.1 christos 8.0xfe+8.0x80+8.IMM16A+8.IMM16B+8.IMM8:D3:::bset 98 1.1 christos "bset" 99 1.1 christos *am33_2 100 1.1 christos { 101 1.6 christos uint32_t temp; 102 1.1 christos int z; 103 1.1 christos 104 1.1 christos PC = cia; 105 1.1 christos temp = load_byte (FETCH16 (IMM16A, IMM16B)); 106 1.1 christos z = (temp & IMM8) == 0; 107 1.1 christos temp |= IMM8; 108 1.1 christos store_byte (FETCH16 (IMM16A, IMM16B), temp); 109 1.1 christos PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V); 110 1.1 christos PSW |= (z ? PSW_Z : 0); 111 1.1 christos } 112 1.1 christos 113 1.1 christos // 1111 1110 1000 0001 ABS16 IMM8; bclr imm8,(abs16) 114 1.1 christos 8.0xfe+8.0x81+8.IMM16A+8.IMM16B+8.IMM8:D3:::bclr 115 1.1 christos "bclr" 116 1.1 christos *am33_2 117 1.1 christos { 118 1.6 christos uint32_t temp; 119 1.1 christos int z; 120 1.1 christos 121 1.1 christos PC = cia; 122 1.1 christos temp = load_byte (FETCH16 (IMM16A, IMM16B)); 123 1.1 christos z = (temp & IMM8) == 0; 124 1.1 christos temp = temp & ~(IMM8); 125 1.1 christos store_byte (FETCH16 (IMM16A, IMM16B), temp); 126 1.1 christos PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V); 127 1.1 christos PSW |= (z ? PSW_Z : 0); 128 1.1 christos } 129 1.1 christos 130 1.1 christos // single precision fmov: 131 1.1 christos 132 1.1 christos // 1111 1001 0010 000X Rm.. Sn..; fmov (Rm),FSn 133 1.1 christos 8.0xf9+4.2,3.0,1.X+4.Rm,4.Sn:D1a:::fmov 134 1.1 christos "fmov" 135 1.1 christos *am33_2 136 1.1 christos { 137 1.1 christos PC = cia; 138 1.1 christos 139 1.1 christos if (FPU_DISABLED) 140 1.1 christos fpu_disabled_exception (SD, CPU, cia); 141 1.1 christos else 142 1.1 christos { 143 1.1 christos int reg = translate_rreg (SD_, Rm); 144 1.1 christos XS2FS (X,Sn) = load_word (State.regs[reg]); 145 1.1 christos } 146 1.1 christos } 147 1.1 christos 148 1.1 christos // 1111 1001 0010 001X Rm.. Sn..; fmov (Rm+),FSn 149 1.1 christos 8.0xf9+4.2,3.1,1.X+4.Rm,4.Sn:D1b:::fmov 150 1.1 christos "fmov" 151 1.1 christos *am33_2 152 1.1 christos { 153 1.1 christos PC = cia; 154 1.1 christos 155 1.1 christos if (FPU_DISABLED) 156 1.1 christos fpu_disabled_exception (SD, CPU, cia); 157 1.1 christos else 158 1.1 christos { 159 1.1 christos int reg = translate_rreg (SD_, Rm); 160 1.1 christos XS2FS (X,Sn) = load_word (State.regs[reg]); 161 1.1 christos State.regs[reg] += 4; 162 1.1 christos } 163 1.1 christos } 164 1.1 christos 165 1.1 christos // 1111 1001 0010 010X ---- Sn..; fmov (SP),FSn 166 1.1 christos 8.0xf9+4.2,3.2,1.X+4.0,4.Sn:D1c:::fmov 167 1.1 christos "fmov" 168 1.1 christos *am33_2 169 1.1 christos { 170 1.1 christos PC = cia; 171 1.1 christos 172 1.1 christos if (FPU_DISABLED) 173 1.1 christos fpu_disabled_exception (SD, CPU, cia); 174 1.1 christos else 175 1.1 christos { 176 1.1 christos int reg = REG_SP; 177 1.1 christos XS2FS (X,Sn) = load_word (State.regs[reg]); 178 1.1 christos } 179 1.1 christos } 180 1.1 christos 181 1.1 christos // 1111 1001 0010 011X Rm.. Sn..; fmov Rm,FSn 182 1.1 christos 8.0xf9+4.2,3.3,1.X+4.Rm,4.Sn:D1d:::fmov 183 1.1 christos "fmov" 184 1.1 christos *am33_2 185 1.1 christos { 186 1.1 christos PC = cia; 187 1.1 christos 188 1.1 christos if (FPU_DISABLED) 189 1.1 christos fpu_disabled_exception (SD, CPU, cia); 190 1.1 christos else 191 1.1 christos { 192 1.1 christos int reg = translate_rreg (SD_, Rm); 193 1.1 christos XS2FS (X,Sn) = State.regs[reg]; 194 1.1 christos } 195 1.1 christos } 196 1.1 christos 197 1.1 christos // 1111 1001 0011 00Y0 Sm.. Rn..; fmov FSm,(Rn) 198 1.1 christos 8.0xf9+4.3,2.0,1.Y,1.0+4.Sm,4.Rn:D1e:::fmov 199 1.1 christos "fmov" 200 1.1 christos *am33_2 201 1.1 christos { 202 1.1 christos PC = cia; 203 1.1 christos 204 1.1 christos if (FPU_DISABLED) 205 1.1 christos fpu_disabled_exception (SD, CPU, cia); 206 1.1 christos else 207 1.1 christos { 208 1.1 christos int reg = translate_rreg (SD_, Rn); 209 1.1 christos store_word (State.regs[reg], XS2FS (Y,Sm)); 210 1.1 christos } 211 1.1 christos } 212 1.1 christos 213 1.1 christos // 1111 1001 0011 00Y1 Sm.. Rn..; fmov FSm,(Rn+) 214 1.1 christos 8.0xf9+4.3,2.0,1.Y,1.1+4.Sm,4.Rn:D1f:::fmov 215 1.1 christos "fmov" 216 1.1 christos *am33_2 217 1.1 christos { 218 1.1 christos PC = cia; 219 1.1 christos 220 1.1 christos if (FPU_DISABLED) 221 1.1 christos fpu_disabled_exception (SD, CPU, cia); 222 1.1 christos else 223 1.1 christos { 224 1.1 christos int reg = translate_rreg (SD_, Rn); 225 1.1 christos store_word (State.regs[reg], XS2FS (Y,Sm)); 226 1.1 christos State.regs[reg] += 4; 227 1.1 christos } 228 1.1 christos } 229 1.1 christos 230 1.1 christos // 1111 1001 0011 01Y0 Sm.. ----; fmov FSm,(SP) 231 1.1 christos 8.0xf9+4.3,2.1,1.Y,1.0+4.Sm,4.0:D1g:::fmov 232 1.1 christos "fmov" 233 1.1 christos *am33_2 234 1.1 christos { 235 1.1 christos PC = cia; 236 1.1 christos 237 1.1 christos if (FPU_DISABLED) 238 1.1 christos fpu_disabled_exception (SD, CPU, cia); 239 1.1 christos else 240 1.1 christos { 241 1.1 christos int reg = REG_SP; 242 1.1 christos store_word (State.regs[reg], XS2FS (Y,Sm)); 243 1.1 christos } 244 1.1 christos } 245 1.1 christos 246 1.1 christos // 1111 1001 0011 01Y1 Sm.. Rn..; fmov FSm,Rn 247 1.1 christos 8.0xf9+4.3,2.1,1.Y,1.1+4.Sm,4.Rn:D1h:::fmov 248 1.1 christos "fmov" 249 1.1 christos *am33_2 250 1.1 christos { 251 1.1 christos PC = cia; 252 1.1 christos 253 1.1 christos if (FPU_DISABLED) 254 1.1 christos fpu_disabled_exception (SD, CPU, cia); 255 1.1 christos else 256 1.1 christos { 257 1.1 christos int reg = translate_rreg (SD_, Rn); 258 1.1 christos State.regs[reg] = XS2FS (Y,Sm); 259 1.1 christos } 260 1.1 christos } 261 1.1 christos 262 1.1 christos // 1111 1001 0100 00YX Sm.. Sn..; fmov FSm,FSn 263 1.1 christos 8.0xf9+4.4,2.0,1.Y,1.X+4.Sm,4.Sn:D1i:::fmov 264 1.1 christos "fmov" 265 1.1 christos *am33_2 266 1.1 christos { 267 1.1 christos PC = cia; 268 1.1 christos 269 1.1 christos if (FPU_DISABLED) 270 1.1 christos fpu_disabled_exception (SD, CPU, cia); 271 1.1 christos else 272 1.1 christos XS2FS (X,Sn) = XS2FS (Y,Sm); 273 1.1 christos } 274 1.1 christos 275 1.1 christos // 1111 1011 0010 000X Rm.. Sn.. d8; fmov (d8,Rm),FSn 276 1.1 christos 8.0xfb+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM8:D2a:::fmov 277 1.1 christos "fmov" 278 1.1 christos *am33_2 279 1.1 christos { 280 1.1 christos PC = cia; 281 1.1 christos 282 1.1 christos if (FPU_DISABLED) 283 1.1 christos fpu_disabled_exception (SD, CPU, cia); 284 1.1 christos else 285 1.1 christos { 286 1.1 christos int reg = translate_rreg (SD_, Rm); 287 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] + EXTEND8 (IMM8)); 288 1.1 christos } 289 1.1 christos } 290 1.1 christos 291 1.1 christos // 1111 1011 0010 001X Rm.. Sn.. d8; fmov (Rm+,imm8),FSn 292 1.1 christos 8.0xfb+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM8:D2b:::fmov 293 1.1 christos "fmov" 294 1.1 christos *am33_2 295 1.1 christos { 296 1.1 christos PC = cia; 297 1.1 christos 298 1.1 christos if (FPU_DISABLED) 299 1.1 christos fpu_disabled_exception (SD, CPU, cia); 300 1.1 christos else 301 1.1 christos { 302 1.1 christos int reg = translate_rreg (SD_, Rm); 303 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] + EXTEND8 (IMM8)); 304 1.1 christos State.regs[reg] += 4; 305 1.1 christos } 306 1.1 christos } 307 1.1 christos 308 1.1 christos // 1111 1011 0010 010X ---- Sn.. d8; fmov (d8,SP),FSn 309 1.1 christos 8.0xfb+4.2,3.2,1.X+4.0,4.Sn+8.IMM8:D2c:::fmov 310 1.1 christos "fmov" 311 1.1 christos *am33_2 312 1.1 christos { 313 1.1 christos PC = cia; 314 1.1 christos 315 1.1 christos if (FPU_DISABLED) 316 1.1 christos fpu_disabled_exception (SD, CPU, cia); 317 1.1 christos else 318 1.1 christos { 319 1.1 christos int reg = REG_SP; 320 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] + IMM8); 321 1.1 christos } 322 1.1 christos } 323 1.1 christos 324 1.1 christos // 1111 1011 0010 0111 Ri.. Rm.. Sn.. --Z-; fmov (Ri,Rm),FSn 325 1.1 christos 8.0xfb+8.0x27+4.Ri,4.Rm+4.Sn,2.0,1.Z,1.0:D2d:::fmov 326 1.1 christos "fmov" 327 1.1 christos *am33_2 328 1.1 christos { 329 1.1 christos PC = cia; 330 1.1 christos 331 1.1 christos if (FPU_DISABLED) 332 1.1 christos fpu_disabled_exception (SD, CPU, cia); 333 1.1 christos else 334 1.1 christos { 335 1.1 christos int ri = translate_rreg (SD_, Ri); 336 1.1 christos int rm = translate_rreg (SD_, Rm); 337 1.1 christos XS2FS (Z, Sn) = load_word (State.regs[ri] + State.regs[rm]); 338 1.1 christos } 339 1.1 christos } 340 1.1 christos 341 1.1 christos // 1111 1011 0011 00Y0 Sm.. Rn.. d8; fmov FSm,(d8,Rn) 342 1.1 christos 8.0xfb+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM8:D2e:::fmov 343 1.1 christos "fmov" 344 1.1 christos *am33_2 345 1.1 christos { 346 1.1 christos PC = cia; 347 1.1 christos 348 1.1 christos if (FPU_DISABLED) 349 1.1 christos fpu_disabled_exception (SD, CPU, cia); 350 1.1 christos else 351 1.1 christos { 352 1.1 christos int reg = translate_rreg (SD_, Rn); 353 1.1 christos store_word (State.regs[reg] + EXTEND8 (IMM8), XS2FS (Y, Sm)); 354 1.1 christos } 355 1.1 christos } 356 1.1 christos 357 1.1 christos // 1111 1011 0011 00Y1 Sm.. Rn.. d8; fmov FSm,(Rn+,d8) 358 1.1 christos 8.0xfb+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM8:D2f:::fmov 359 1.1 christos "fmov" 360 1.1 christos *am33_2 361 1.1 christos { 362 1.1 christos PC = cia; 363 1.1 christos 364 1.1 christos if (FPU_DISABLED) 365 1.1 christos fpu_disabled_exception (SD, CPU, cia); 366 1.1 christos else 367 1.1 christos { 368 1.1 christos int reg = translate_rreg (SD_, Rn); 369 1.1 christos store_word (State.regs[reg] + EXTEND8 (IMM8), XS2FS (Y, Sm)); 370 1.1 christos State.regs[reg] += 4; 371 1.1 christos } 372 1.1 christos } 373 1.1 christos 374 1.1 christos // 1111 1011 0011 01Y0 Sm.. ---- d8; fmov FSm,(d8,SP) 375 1.1 christos 8.0xfb+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM8:D2g:::fmov 376 1.1 christos "fmov" 377 1.1 christos *am33_2 378 1.1 christos { 379 1.1 christos PC = cia; 380 1.1 christos 381 1.1 christos if (FPU_DISABLED) 382 1.1 christos fpu_disabled_exception (SD, CPU, cia); 383 1.1 christos else 384 1.1 christos { 385 1.1 christos int reg = REG_SP; 386 1.1 christos store_word (State.regs[reg] + IMM8, XS2FS (Y, Sm)); 387 1.1 christos } 388 1.1 christos } 389 1.1 christos 390 1.1 christos // 1111 1011 0011 0111 Ri.. Rm.. Sm.. --Z-; fmov FSm,(Ri,Rm) 391 1.1 christos 8.0xfb+8.0x37+4.Ri,4.Rm+4.Sm,2.0,1.Z,1.0:D2h:::fmov 392 1.1 christos "fmov" 393 1.1 christos *am33_2 394 1.1 christos { 395 1.1 christos PC = cia; 396 1.1 christos 397 1.1 christos if (FPU_DISABLED) 398 1.1 christos fpu_disabled_exception (SD, CPU, cia); 399 1.1 christos else 400 1.1 christos { 401 1.1 christos int ri = translate_rreg (SD_, Ri); 402 1.1 christos int rm = translate_rreg (SD_, Rm); 403 1.1 christos store_word (State.regs[ri] + State.regs[rm], XS2FS (Z, Sm)); 404 1.1 christos } 405 1.1 christos } 406 1.1 christos 407 1.1 christos // 1111 1101 0010 000X Rm.. Sn.. d24; fmov (d24,Rm),FSn 408 1.1 christos 8.0xfd+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4a:::fmov 409 1.1 christos "fmov" 410 1.1 christos *am33_2 411 1.1 christos { 412 1.1 christos PC = cia; 413 1.1 christos 414 1.1 christos if (FPU_DISABLED) 415 1.1 christos fpu_disabled_exception (SD, CPU, cia); 416 1.1 christos else 417 1.1 christos { 418 1.1 christos int reg = translate_rreg (SD_, Rm); 419 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] 420 1.1 christos + EXTEND24 (FETCH24 (IMM24A, 421 1.1 christos IMM24B, IMM24C))); 422 1.1 christos } 423 1.1 christos } 424 1.1 christos 425 1.1 christos // 1111 1101 0010 001X Rm.. Sn.. d24; fmov (Rm+,imm24),FSn 426 1.1 christos 8.0xfd+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4b:::fmov 427 1.1 christos "fmov" 428 1.1 christos *am33_2 429 1.1 christos { 430 1.1 christos PC = cia; 431 1.1 christos 432 1.1 christos if (FPU_DISABLED) 433 1.1 christos fpu_disabled_exception (SD, CPU, cia); 434 1.1 christos else 435 1.1 christos { 436 1.1 christos int reg = translate_rreg (SD_, Rm); 437 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] 438 1.1 christos + EXTEND24 (FETCH24 (IMM24A, 439 1.1 christos IMM24B, IMM24C))); 440 1.1 christos State.regs[reg] += 4; 441 1.1 christos } 442 1.1 christos } 443 1.1 christos 444 1.1 christos // 1111 1101 0010 010X ---- Sn.. d24; fmov (d24,SP),FSn 445 1.1 christos 8.0xfd+4.2,3.2,1.X+4.0,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4c:::fmov 446 1.1 christos "fmov" 447 1.1 christos *am33_2 448 1.1 christos { 449 1.1 christos PC = cia; 450 1.1 christos 451 1.1 christos if (FPU_DISABLED) 452 1.1 christos fpu_disabled_exception (SD, CPU, cia); 453 1.1 christos else 454 1.1 christos { 455 1.1 christos int reg = REG_SP; 456 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] + FETCH24 (IMM24A, 457 1.1 christos IMM24B, IMM24C)); 458 1.1 christos } 459 1.1 christos } 460 1.1 christos 461 1.1 christos // 1111 1101 0011 00Y0 Sm.. Rn.. d24; fmov FSm,(d24,Rn) 462 1.1 christos 8.0xfd+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4e:::fmov 463 1.1 christos "fmov" 464 1.1 christos *am33_2 465 1.1 christos { 466 1.1 christos PC = cia; 467 1.1 christos 468 1.1 christos if (FPU_DISABLED) 469 1.1 christos fpu_disabled_exception (SD, CPU, cia); 470 1.1 christos else 471 1.1 christos { 472 1.1 christos int reg = translate_rreg (SD_, Rn); 473 1.1 christos store_word (State.regs[reg] 474 1.1 christos + EXTEND24 (FETCH24 (IMM24A, 475 1.1 christos IMM24B, IMM24C)), XS2FS (Y, Sm)); 476 1.1 christos } 477 1.1 christos } 478 1.1 christos 479 1.1 christos // 1111 1101 0011 00Y1 Sm.. Rn.. d24; fmov FSm,(Rn+,d24) 480 1.1 christos 8.0xfd+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4f:::fmov 481 1.1 christos "fmov" 482 1.1 christos *am33_2 483 1.1 christos { 484 1.1 christos PC = cia; 485 1.1 christos 486 1.1 christos if (FPU_DISABLED) 487 1.1 christos fpu_disabled_exception (SD, CPU, cia); 488 1.1 christos else 489 1.1 christos { 490 1.1 christos int reg = translate_rreg (SD_, Rn); 491 1.1 christos store_word (State.regs[reg] 492 1.1 christos + EXTEND24 (FETCH24 (IMM24A, 493 1.1 christos IMM24B, IMM24C)), XS2FS (Y, Sm)); 494 1.1 christos State.regs[reg] += 4; 495 1.1 christos } 496 1.1 christos } 497 1.1 christos 498 1.1 christos // 1111 1101 0011 01Y0 Sm.. ---- d24; fmov FSm,(d24,SP) 499 1.1 christos 8.0xfd+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM24A+8.IMM24B+8.IMM24C:D4g:::fmov 500 1.1 christos "fmov" 501 1.1 christos *am33_2 502 1.1 christos { 503 1.1 christos PC = cia; 504 1.1 christos 505 1.1 christos if (FPU_DISABLED) 506 1.1 christos fpu_disabled_exception (SD, CPU, cia); 507 1.1 christos else 508 1.1 christos { 509 1.1 christos int reg = REG_SP; 510 1.1 christos store_word (State.regs[reg] 511 1.1 christos + FETCH24 (IMM24A, 512 1.1 christos IMM24B, IMM24C), XS2FS (Y, Sm)); 513 1.1 christos } 514 1.1 christos } 515 1.1 christos 516 1.1 christos // 1111 1110 0010 000X Rm.. Sn.. d32; fmov (d32,Rm),FSn 517 1.1 christos 8.0xfe+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5a:::fmov 518 1.1 christos "fmov" 519 1.1 christos *am33_2 520 1.1 christos { 521 1.1 christos PC = cia; 522 1.1 christos 523 1.1 christos if (FPU_DISABLED) 524 1.1 christos fpu_disabled_exception (SD, CPU, cia); 525 1.1 christos else 526 1.1 christos { 527 1.1 christos int reg = translate_rreg (SD_, Rm); 528 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] 529 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B, 530 1.1 christos IMM32C, IMM32D))); 531 1.1 christos } 532 1.1 christos } 533 1.1 christos 534 1.1 christos // 1111 1110 0010 001X Rm.. Sn.. d32; fmov (Rm+,imm32),FSn 535 1.1 christos 8.0xfe+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5b:::fmov 536 1.1 christos "fmov" 537 1.1 christos *am33_2 538 1.1 christos { 539 1.1 christos PC = cia; 540 1.1 christos 541 1.1 christos if (FPU_DISABLED) 542 1.1 christos fpu_disabled_exception (SD, CPU, cia); 543 1.1 christos else 544 1.1 christos { 545 1.1 christos int reg = translate_rreg (SD_, Rm); 546 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] 547 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B, 548 1.1 christos IMM32C, IMM32D))); 549 1.1 christos State.regs[reg] += 4; 550 1.1 christos } 551 1.1 christos } 552 1.1 christos 553 1.1 christos // 1111 1110 0010 010X ---- Sn.. d32; fmov (d32,SP),FSn 554 1.1 christos 8.0xfe+4.2,3.2,1.X+4.0,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5c:::fmov 555 1.1 christos "fmov" 556 1.1 christos *am33_2 557 1.1 christos { 558 1.1 christos PC = cia; 559 1.1 christos 560 1.1 christos if (FPU_DISABLED) 561 1.1 christos fpu_disabled_exception (SD, CPU, cia); 562 1.1 christos else 563 1.1 christos { 564 1.1 christos int reg = REG_SP; 565 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] 566 1.1 christos + FETCH32 (IMM32A, IMM32B, 567 1.1 christos IMM32C, IMM32D)); 568 1.1 christos } 569 1.1 christos } 570 1.1 christos 571 1.1 christos // 1111 1110 0010 011X ---- Sn.. d32; fmov imm32,FSn 572 1.1 christos 8.0xfe+4.2,3.3,1.X+4.0,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5d:::fmov 573 1.1 christos "fmov" 574 1.1 christos *am33_2 575 1.1 christos { 576 1.1 christos PC = cia; 577 1.1 christos 578 1.1 christos if (FPU_DISABLED) 579 1.1 christos fpu_disabled_exception (SD, CPU, cia); 580 1.1 christos else 581 1.1 christos XS2FS (X, Sn) = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 582 1.1 christos } 583 1.1 christos 584 1.1 christos // 1111 1110 0011 00Y0 Sm.. Rn.. d32; fmov FSm,(d32,Rn) 585 1.1 christos 8.0xfe+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5e:::fmov 586 1.1 christos "fmov" 587 1.1 christos *am33_2 588 1.1 christos { 589 1.1 christos PC = cia; 590 1.1 christos 591 1.1 christos if (FPU_DISABLED) 592 1.1 christos fpu_disabled_exception (SD, CPU, cia); 593 1.1 christos else 594 1.1 christos { 595 1.1 christos int reg = translate_rreg (SD_, Rn); 596 1.1 christos store_word (State.regs[reg] 597 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B, 598 1.1 christos IMM32C, IMM32D)), XS2FS (Y, Sm)); 599 1.1 christos } 600 1.1 christos } 601 1.1 christos 602 1.1 christos // 1111 1110 0011 00Y1 Sm.. Rn.. d32; fmov FSm,(Rn+,d32) 603 1.1 christos 8.0xfe+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5f:::fmov 604 1.1 christos "fmov" 605 1.1 christos *am33_2 606 1.1 christos { 607 1.1 christos PC = cia; 608 1.1 christos 609 1.1 christos if (FPU_DISABLED) 610 1.1 christos fpu_disabled_exception (SD, CPU, cia); 611 1.1 christos else 612 1.1 christos { 613 1.1 christos int reg = translate_rreg (SD_, Rn); 614 1.1 christos store_word (State.regs[reg] 615 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B, 616 1.1 christos IMM32C, IMM32D)), XS2FS (Y, Sm)); 617 1.1 christos State.regs[reg] += 4; 618 1.1 christos } 619 1.1 christos } 620 1.1 christos 621 1.1 christos // 1111 1110 0011 01Y0 Sm.. ---- d32; fmov FSm,(d32,SP) 622 1.1 christos 8.0xfe+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5g:::fmov 623 1.1 christos "fmov" 624 1.1 christos *am33_2 625 1.1 christos { 626 1.1 christos PC = cia; 627 1.1 christos 628 1.1 christos if (FPU_DISABLED) 629 1.1 christos fpu_disabled_exception (SD, CPU, cia); 630 1.1 christos else 631 1.1 christos { 632 1.1 christos int reg = REG_SP; 633 1.1 christos store_word (State.regs[reg] 634 1.1 christos + FETCH32 (IMM32A, IMM32B, 635 1.1 christos IMM32C, IMM32D), XS2FS (Y, Sm)); 636 1.1 christos } 637 1.1 christos } 638 1.1 christos 639 1.1 christos // double precision fmov: 640 1.1 christos 641 1.1 christos // 1111 1001 1010 000X Rm.. fn.-; fmov (Rm),FDn 642 1.1 christos 8.0xf9+4.0xa,3.0,1.X+4.Rm,3.fn,1.0:D1j:::fmov 643 1.1 christos "fmov" 644 1.1 christos *am33_2 645 1.1 christos { 646 1.1 christos PC = cia; 647 1.1 christos 648 1.1 christos if (FPU_DISABLED) 649 1.1 christos fpu_disabled_exception (SD, CPU, cia); 650 1.1 christos else 651 1.1 christos { 652 1.1 christos int reg = translate_rreg (SD_, Rm); 653 1.1 christos Xf2FD (X,fn) = load_dword (State.regs[reg]); 654 1.1 christos } 655 1.1 christos } 656 1.1 christos 657 1.1 christos // 1111 1001 1010 001X Rm.. fn.-; fmov (Rm+),FDn 658 1.1 christos 8.0xf9+4.0xa,3.1,1.X+4.Rm,3.fn,1.0:D1k:::fmov 659 1.1 christos "fmov" 660 1.1 christos *am33_2 661 1.1 christos { 662 1.1 christos PC = cia; 663 1.1 christos 664 1.1 christos if (FPU_DISABLED) 665 1.1 christos fpu_disabled_exception (SD, CPU, cia); 666 1.1 christos else 667 1.1 christos { 668 1.1 christos int reg = translate_rreg (SD_, Rm); 669 1.1 christos Xf2FD (X,fn) = load_dword (State.regs[reg]); 670 1.1 christos State.regs[reg] += 8; 671 1.1 christos } 672 1.1 christos } 673 1.1 christos 674 1.1 christos // 1111 1001 1010 010X ---- fn.-; fmov (SP),FDn 675 1.1 christos 8.0xf9+4.0xa,3.2,1.X+4.0,3.fn,1.0:D1l:::fmov 676 1.1 christos "fmov" 677 1.1 christos *am33_2 678 1.1 christos { 679 1.1 christos PC = cia; 680 1.1 christos 681 1.1 christos if (FPU_DISABLED) 682 1.1 christos fpu_disabled_exception (SD, CPU, cia); 683 1.1 christos else 684 1.1 christos { 685 1.1 christos int reg = REG_SP; 686 1.1 christos Xf2FD (X,fn) = load_dword (State.regs[reg]); 687 1.1 christos } 688 1.1 christos } 689 1.1 christos 690 1.1 christos // 1111 1001 1011 00Y0 fm.- Rn..; fmov FDm,(Rn) 691 1.1 christos 8.0xf9+4.0xb,2.0,1.Y,1.0+3.fm,1.0,4.Rn:D1m:::fmov 692 1.1 christos "fmov" 693 1.1 christos *am33_2 694 1.1 christos { 695 1.1 christos PC = cia; 696 1.1 christos 697 1.1 christos if (FPU_DISABLED) 698 1.1 christos fpu_disabled_exception (SD, CPU, cia); 699 1.1 christos else 700 1.1 christos { 701 1.1 christos int reg = translate_rreg (SD_, Rn); 702 1.1 christos store_dword (State.regs[reg], Xf2FD (Y,fm)); 703 1.1 christos } 704 1.1 christos } 705 1.1 christos 706 1.1 christos // 1111 1001 1011 00Y1 fm.- Rn..; fmov FDm,(Rn+) 707 1.1 christos 8.0xf9+4.0xb,2.0,1.Y,1.1+3.fm,1.0,4.Rn:D1n:::fmov 708 1.1 christos "fmov" 709 1.1 christos *am33_2 710 1.1 christos { 711 1.1 christos PC = cia; 712 1.1 christos 713 1.1 christos if (FPU_DISABLED) 714 1.1 christos fpu_disabled_exception (SD, CPU, cia); 715 1.1 christos else 716 1.1 christos { 717 1.1 christos int reg = translate_rreg (SD_, Rn); 718 1.1 christos store_dword (State.regs[reg], Xf2FD (Y,fm)); 719 1.1 christos State.regs[reg] += 8; 720 1.1 christos } 721 1.1 christos } 722 1.1 christos 723 1.1 christos // 1111 1001 1011 01Y0 fm.- ----; fmov FDm,(SP) 724 1.1 christos 8.0xf9+4.0xb,2.1,1.Y,1.0+3.fm,1.0,4.0:D1o:::fmov 725 1.1 christos "fmov" 726 1.1 christos *am33_2 727 1.1 christos { 728 1.1 christos PC = cia; 729 1.1 christos 730 1.1 christos if (FPU_DISABLED) 731 1.1 christos fpu_disabled_exception (SD, CPU, cia); 732 1.1 christos else 733 1.1 christos { 734 1.1 christos int reg = REG_SP; 735 1.1 christos store_dword (State.regs[reg], Xf2FD (Y,fm)); 736 1.1 christos } 737 1.1 christos } 738 1.1 christos 739 1.1 christos // 1111 1001 1100 00YX fm.- fn.-; fmov FDm,FDn 740 1.1 christos 8.0xf9+4.0xc,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1p:::fmov 741 1.1 christos "fmov" 742 1.1 christos *am33_2 743 1.1 christos { 744 1.1 christos PC = cia; 745 1.1 christos 746 1.1 christos if (FPU_DISABLED) 747 1.1 christos fpu_disabled_exception (SD, CPU, cia); 748 1.1 christos else 749 1.1 christos fpu_unimp_exception (SD, CPU, cia); 750 1.1 christos } 751 1.1 christos 752 1.1 christos // 1111 1011 0100 0111 Ri.. Rm.. fn.- --Z-; fmov (Ri,Rm),FDn 753 1.1 christos 8.0xfb+8.0x47+4.Ri,4.Rm+3.fn,1.0,2.0,1.Z,1.0:D2i:::fmov 754 1.1 christos "fmov" 755 1.1 christos *am33_2 756 1.1 christos { 757 1.1 christos PC = cia; 758 1.1 christos 759 1.1 christos if (FPU_DISABLED) 760 1.1 christos fpu_disabled_exception (SD, CPU, cia); 761 1.1 christos else 762 1.1 christos { 763 1.1 christos int ri = translate_rreg (SD_, Ri); 764 1.1 christos int rm = translate_rreg (SD_, Rm); 765 1.1 christos Xf2FD (Z,fn) = load_dword (State.regs[ri] + State.regs[rm]); 766 1.1 christos } 767 1.1 christos } 768 1.1 christos 769 1.1 christos // 1111 1011 0101 0111 Ri.. Rn.. fm.- --Z-; fmov FDm,(Ri,Rn) 770 1.1 christos 8.0xfb+8.0x57+4.Ri,4.Rn+3.fm,1.0,2.0,1.Z,1.0:D2j:::fmov 771 1.1 christos "fmov" 772 1.1 christos *am33_2 773 1.1 christos { 774 1.1 christos PC = cia; 775 1.1 christos 776 1.1 christos if (FPU_DISABLED) 777 1.1 christos fpu_disabled_exception (SD, CPU, cia); 778 1.1 christos else 779 1.1 christos { 780 1.1 christos int ri = translate_rreg (SD_, Ri); 781 1.1 christos int rn = translate_rreg (SD_, Rn); 782 1.1 christos store_dword (State.regs[ri] + State.regs[rn], Xf2FD (Z,fm)); 783 1.1 christos } 784 1.1 christos } 785 1.1 christos 786 1.1 christos // 1111 1011 1010 000X Rm.. fn.- d8; fmov (d8,Rm),FDn 787 1.1 christos 8.0xfb+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM8:D2k:::fmov 788 1.1 christos "fmov" 789 1.1 christos *am33_2 790 1.1 christos { 791 1.1 christos PC = cia; 792 1.1 christos 793 1.1 christos if (FPU_DISABLED) 794 1.1 christos fpu_disabled_exception (SD, CPU, cia); 795 1.1 christos else 796 1.1 christos { 797 1.1 christos int reg = translate_rreg (SD_, Rm); 798 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] + EXTEND8 (IMM8)); 799 1.1 christos } 800 1.1 christos } 801 1.1 christos 802 1.1 christos // 1111 1011 1010 001X Rm.. fn.- d8; fmov (Rm+,imm8),FDn 803 1.1 christos 8.0xfb+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM8:D2l:::fmov 804 1.1 christos "fmov" 805 1.1 christos *am33_2 806 1.1 christos { 807 1.1 christos PC = cia; 808 1.1 christos 809 1.1 christos if (FPU_DISABLED) 810 1.1 christos fpu_disabled_exception (SD, CPU, cia); 811 1.1 christos else 812 1.1 christos { 813 1.1 christos int reg = translate_rreg (SD_, Rm); 814 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] + EXTEND8 (IMM8)); 815 1.1 christos State.regs[reg] += 8; 816 1.1 christos } 817 1.1 christos } 818 1.1 christos 819 1.1 christos // 1111 1011 1010 010X ---- fn.- d8; fmov (d8,SP),FDn 820 1.1 christos 8.0xfb+4.0xa,3.2,1.X+4.0,4.fn+8.IMM8:D2m:::fmov 821 1.1 christos "fmov" 822 1.1 christos *am33_2 823 1.1 christos { 824 1.1 christos PC = cia; 825 1.1 christos 826 1.1 christos if (FPU_DISABLED) 827 1.1 christos fpu_disabled_exception (SD, CPU, cia); 828 1.1 christos else 829 1.1 christos { 830 1.1 christos int reg = REG_SP; 831 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] + IMM8); 832 1.1 christos } 833 1.1 christos } 834 1.1 christos 835 1.1 christos // 1111 1011 1011 00Y0 fm.- Rn.. d8; fmov FDm,(d8,Rn) 836 1.1 christos 8.0xfb+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM8:D2n:::fmov 837 1.1 christos "fmov" 838 1.1 christos *am33_2 839 1.1 christos { 840 1.1 christos PC = cia; 841 1.1 christos 842 1.1 christos if (FPU_DISABLED) 843 1.1 christos fpu_disabled_exception (SD, CPU, cia); 844 1.1 christos else 845 1.1 christos { 846 1.1 christos int reg = translate_rreg (SD_, Rn); 847 1.1 christos store_dword (State.regs[reg] + EXTEND8 (IMM8), Xf2FD (Y, fm)); 848 1.1 christos } 849 1.1 christos } 850 1.1 christos 851 1.1 christos // 1111 1011 1011 00Y1 fm.- Rn.. d8; fmov FDm,(Rn+,d8) 852 1.1 christos 8.0xfb+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM8:D2o:::fmov 853 1.1 christos "fmov" 854 1.1 christos *am33_2 855 1.1 christos { 856 1.1 christos PC = cia; 857 1.1 christos 858 1.1 christos if (FPU_DISABLED) 859 1.1 christos fpu_disabled_exception (SD, CPU, cia); 860 1.1 christos else 861 1.1 christos { 862 1.1 christos int reg = translate_rreg (SD_, Rn); 863 1.1 christos store_dword (State.regs[reg] + EXTEND8 (IMM8), Xf2FD (Y, fm)); 864 1.1 christos State.regs[reg] += 8; 865 1.1 christos } 866 1.1 christos } 867 1.1 christos 868 1.1 christos // 1111 1011 1011 01Y0 fm.- ---- d8; fmov FDm,(d8,SP) 869 1.1 christos 8.0xfb+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM8:D2p:::fmov 870 1.1 christos "fmov" 871 1.1 christos *am33_2 872 1.1 christos { 873 1.1 christos PC = cia; 874 1.1 christos 875 1.1 christos if (FPU_DISABLED) 876 1.1 christos fpu_disabled_exception (SD, CPU, cia); 877 1.1 christos else 878 1.1 christos { 879 1.1 christos int reg = REG_SP; 880 1.1 christos store_dword (State.regs[reg] + IMM8, Xf2FD (Y, fm)); 881 1.1 christos } 882 1.1 christos } 883 1.1 christos 884 1.1 christos // 1111 1101 1010 000X Rm.. fn.- d24; fmov (d24,Rm),FDn 885 1.1 christos 8.0xfd+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4k:::fmov 886 1.1 christos "fmov" 887 1.1 christos *am33_2 888 1.1 christos { 889 1.1 christos PC = cia; 890 1.1 christos 891 1.1 christos if (FPU_DISABLED) 892 1.1 christos fpu_disabled_exception (SD, CPU, cia); 893 1.1 christos else 894 1.1 christos { 895 1.1 christos int reg = translate_rreg (SD_, Rm); 896 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] 897 1.1 christos + EXTEND24 (FETCH24 (IMM24A, 898 1.1 christos IMM24B, IMM24C))); 899 1.1 christos } 900 1.1 christos } 901 1.1 christos 902 1.1 christos // 1111 1101 1010 001X Rm.. fn.- d24; fmov (Rm+,imm24),FDn 903 1.1 christos 8.0xfd+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4l:::fmov 904 1.1 christos "fmov" 905 1.1 christos *am33_2 906 1.1 christos { 907 1.1 christos PC = cia; 908 1.1 christos 909 1.1 christos if (FPU_DISABLED) 910 1.1 christos fpu_disabled_exception (SD, CPU, cia); 911 1.1 christos else 912 1.1 christos { 913 1.1 christos int reg = translate_rreg (SD_, Rm); 914 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] 915 1.1 christos + EXTEND24 (FETCH24 (IMM24A, 916 1.1 christos IMM24B, IMM24C))); 917 1.1 christos State.regs[reg] += 8; 918 1.1 christos } 919 1.1 christos } 920 1.1 christos 921 1.1 christos // 1111 1101 1010 010X ---- fn.- d24; fmov (d24,SP),FDn 922 1.1 christos 8.0xfd+4.0xa,3.2,1.X+4.0,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4m:::fmov 923 1.1 christos "fmov" 924 1.1 christos *am33_2 925 1.1 christos { 926 1.1 christos PC = cia; 927 1.1 christos 928 1.1 christos if (FPU_DISABLED) 929 1.1 christos fpu_disabled_exception (SD, CPU, cia); 930 1.1 christos else 931 1.1 christos { 932 1.1 christos int reg = REG_SP; 933 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] 934 1.1 christos + FETCH24 (IMM24A, 935 1.1 christos IMM24B, IMM24C)); 936 1.1 christos } 937 1.1 christos } 938 1.1 christos 939 1.1 christos // 1111 1101 1011 00Y0 fm.- Rn.. d24; fmov FDm,(d24,Rn) 940 1.1 christos 8.0xfd+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4n:::fmov 941 1.1 christos "fmov" 942 1.1 christos *am33_2 943 1.1 christos { 944 1.1 christos PC = cia; 945 1.1 christos 946 1.1 christos if (FPU_DISABLED) 947 1.1 christos fpu_disabled_exception (SD, CPU, cia); 948 1.1 christos else 949 1.1 christos { 950 1.1 christos int reg = translate_rreg (SD_, Rn); 951 1.1 christos store_dword (State.regs[reg] 952 1.1 christos + EXTEND24 (FETCH24 (IMM24A, 953 1.1 christos IMM24B, IMM24C)), Xf2FD (Y, fm)); 954 1.1 christos } 955 1.1 christos } 956 1.1 christos 957 1.1 christos // 1111 1101 1011 00Y1 fm.- Rn.. d24; fmov FDm,(Rn+,d24) 958 1.1 christos 8.0xfd+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4o:::fmov 959 1.1 christos "fmov" 960 1.1 christos *am33_2 961 1.1 christos { 962 1.1 christos PC = cia; 963 1.1 christos 964 1.1 christos if (FPU_DISABLED) 965 1.1 christos fpu_disabled_exception (SD, CPU, cia); 966 1.1 christos else 967 1.1 christos { 968 1.1 christos int reg = translate_rreg (SD_, Rn); 969 1.1 christos store_dword (State.regs[reg] 970 1.1 christos + EXTEND24 (FETCH24 (IMM24A, 971 1.1 christos IMM24B, IMM24C)), Xf2FD (Y, fm)); 972 1.1 christos State.regs[reg] += 8; 973 1.1 christos } 974 1.1 christos } 975 1.1 christos 976 1.1 christos // 1111 1101 1011 01Y0 fm.- ---- d24; fmov FDm,(d24,SP) 977 1.1 christos 8.0xfd+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM24A+8.IMM24B+8.IMM24C:D4p:::fmov 978 1.1 christos "fmov" 979 1.1 christos *am33_2 980 1.1 christos { 981 1.1 christos PC = cia; 982 1.1 christos 983 1.1 christos if (FPU_DISABLED) 984 1.1 christos fpu_disabled_exception (SD, CPU, cia); 985 1.1 christos else 986 1.1 christos { 987 1.1 christos int reg = REG_SP; 988 1.1 christos store_dword (State.regs[reg] + FETCH24 (IMM24A, 989 1.1 christos IMM24B, IMM24C), Xf2FD (Y, fm)); 990 1.1 christos } 991 1.1 christos } 992 1.1 christos 993 1.1 christos // 1111 1110 1010 000X Rm.. fn.- d32; fmov (d32,Rm),FDn 994 1.1 christos 8.0xfe+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5k:::fmov 995 1.1 christos "fmov" 996 1.1 christos *am33_2 997 1.1 christos { 998 1.1 christos PC = cia; 999 1.1 christos 1000 1.1 christos if (FPU_DISABLED) 1001 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1002 1.1 christos else 1003 1.1 christos { 1004 1.1 christos int reg = translate_rreg (SD_, Rm); 1005 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] 1006 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B, 1007 1.1 christos IMM32C, IMM32D))); 1008 1.1 christos } 1009 1.1 christos } 1010 1.1 christos 1011 1.1 christos // 1111 1110 1010 001X Rm.. fn.- d32; fmov (Rm+,imm32),FDn 1012 1.1 christos 8.0xfe+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5l:::fmov 1013 1.1 christos "fmov" 1014 1.1 christos *am33_2 1015 1.1 christos { 1016 1.1 christos PC = cia; 1017 1.1 christos 1018 1.1 christos if (FPU_DISABLED) 1019 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1020 1.1 christos else 1021 1.1 christos { 1022 1.1 christos int reg = translate_rreg (SD_, Rm); 1023 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] 1024 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B, 1025 1.1 christos IMM32C, IMM32D))); 1026 1.1 christos State.regs[reg] += 8; 1027 1.1 christos } 1028 1.1 christos } 1029 1.1 christos 1030 1.1 christos // 1111 1110 1010 010X ---- fn.- d32; fmov (d32,SP),FDn 1031 1.1 christos 8.0xfe+4.0xa,3.2,1.X+4.0,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5m:::fmov 1032 1.1 christos "fmov" 1033 1.1 christos *am33_2 1034 1.1 christos { 1035 1.1 christos PC = cia; 1036 1.1 christos 1037 1.1 christos if (FPU_DISABLED) 1038 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1039 1.1 christos else 1040 1.1 christos { 1041 1.1 christos int reg = REG_SP; 1042 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] 1043 1.1 christos + FETCH32 (IMM32A, IMM32B, 1044 1.1 christos IMM32C, IMM32D)); 1045 1.1 christos } 1046 1.1 christos } 1047 1.1 christos 1048 1.1 christos // 1111 1110 1011 00Y0 fm.- Rn.. d32; fmov FDm,(d32,Rn) 1049 1.1 christos 8.0xfe+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5n:::fmov 1050 1.1 christos "fmov" 1051 1.1 christos *am33_2 1052 1.1 christos { 1053 1.1 christos PC = cia; 1054 1.1 christos 1055 1.1 christos if (FPU_DISABLED) 1056 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1057 1.1 christos else 1058 1.1 christos { 1059 1.1 christos int reg = translate_rreg (SD_, Rn); 1060 1.1 christos store_dword (State.regs[reg] 1061 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B, 1062 1.1 christos IMM32C, IMM32D)), Xf2FD (Y, fm)); 1063 1.1 christos } 1064 1.1 christos } 1065 1.1 christos 1066 1.1 christos // 1111 1110 1011 00Y1 fm.- Rn.. d32; fmov FDm,(Rn+,d32) 1067 1.1 christos 8.0xfe+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5o:::fmov 1068 1.1 christos "fmov" 1069 1.1 christos *am33_2 1070 1.1 christos { 1071 1.1 christos PC = cia; 1072 1.1 christos 1073 1.1 christos if (FPU_DISABLED) 1074 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1075 1.1 christos else 1076 1.1 christos { 1077 1.1 christos int reg = translate_rreg (SD_, Rn); 1078 1.1 christos store_dword (State.regs[reg] 1079 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B, 1080 1.1 christos IMM32C, IMM32D)), Xf2FD (Y, fm)); 1081 1.1 christos State.regs[reg] += 8; 1082 1.1 christos } 1083 1.1 christos } 1084 1.1 christos 1085 1.1 christos // 1111 1110 1011 01Y0 fm.- ---- d32; fmov FDm,(d32,SP) 1086 1.1 christos 8.0xfe+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5p:::fmov 1087 1.1 christos "fmov" 1088 1.1 christos *am33_2 1089 1.1 christos { 1090 1.1 christos PC = cia; 1091 1.1 christos 1092 1.1 christos if (FPU_DISABLED) 1093 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1094 1.1 christos else 1095 1.1 christos { 1096 1.1 christos int reg = REG_SP; 1097 1.1 christos store_dword (State.regs[reg] 1098 1.1 christos + FETCH32 (IMM32A, IMM32B, 1099 1.1 christos IMM32C, IMM32D), Xf2FD (Y, fm)); 1100 1.1 christos } 1101 1.1 christos } 1102 1.1 christos 1103 1.1 christos // FPCR fmov: 1104 1.1 christos 1105 1.1 christos // 1111 1001 1011 0101 Rm.. ----; fmov Rm,FPCR 1106 1.1 christos 8.0xf9+8.0xb5+4.Rm,4.0:D1q:::fmov 1107 1.1 christos "fmov" 1108 1.1 christos *am33_2 1109 1.1 christos { 1110 1.1 christos PC = cia; 1111 1.1 christos 1112 1.1 christos if (FPU_DISABLED) 1113 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1114 1.1 christos else 1115 1.1 christos { 1116 1.1 christos int reg = translate_rreg (SD_, Rm); 1117 1.6 christos uint32_t val = State.regs[reg]; 1118 1.1 christos FPCR = (val & (EC_MASK | EE_MASK | FCC_MASK)) 1119 1.1 christos | ((FPCR & ~val) & EF_MASK); 1120 1.1 christos } 1121 1.1 christos } 1122 1.1 christos 1123 1.1 christos // 1111 1001 1011 0111 ---- Rn..; fmov FPCR,Rn 1124 1.1 christos 8.0xf9+8.0xb7+4.0,4.Rn:D1r:::fmov 1125 1.1 christos "fmov" 1126 1.1 christos *am33_2 1127 1.1 christos { 1128 1.1 christos PC = cia; 1129 1.1 christos 1130 1.1 christos if (FPU_DISABLED) 1131 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1132 1.1 christos else 1133 1.1 christos { 1134 1.1 christos int reg = translate_rreg (SD_, Rn); 1135 1.1 christos State.regs[reg] = FPCR & FPCR_MASK; 1136 1.1 christos } 1137 1.1 christos } 1138 1.1 christos 1139 1.1 christos // 1111 1101 1011 0101 imm32; fmov imm32,FPCR 1140 1.1 christos 8.0xfd+8.0xb5+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fmov 1141 1.1 christos "fmov" 1142 1.1 christos *am33_2 1143 1.1 christos { 1144 1.1 christos PC = cia; 1145 1.1 christos 1146 1.1 christos if (FPU_DISABLED) 1147 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1148 1.1 christos else 1149 1.1 christos { 1150 1.6 christos uint32_t val = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1151 1.1 christos FPCR = (val & (EC_MASK | EE_MASK | FCC_MASK)) 1152 1.1 christos | ((FPCR & ~val) & EF_MASK); 1153 1.1 christos } 1154 1.1 christos } 1155 1.1 christos 1156 1.1 christos // fabs: 1157 1.1 christos 1158 1.1 christos // 1111 1001 0100 010X ---- Sn..; fabs FSn 1159 1.1 christos 8.0xf9+4.4,3.2,1.X+4.0,4.Sn:D1a:::fabs 1160 1.1 christos "fabs" 1161 1.1 christos *am33_2 1162 1.1 christos { 1163 1.1 christos PC = cia; 1164 1.1 christos 1165 1.1 christos if (FPU_DISABLED) 1166 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1167 1.1 christos else 1168 1.1 christos { 1169 1.1 christos sim_fpu in, out; 1170 1.1 christos 1171 1.1 christos FS2FPU (XS2FS (X,Sn), in); 1172 1.1 christos sim_fpu_abs (&out, &in); 1173 1.1 christos FPU2FS (out, XS2FS (X,Sn)); 1174 1.1 christos } 1175 1.1 christos } 1176 1.1 christos 1177 1.1 christos // 1111 1001 1100 010X ---- Sn..; fabs FDn 1178 1.1 christos 8.0xf9+4.0xc,3.2,1.X+4.0,3.fn,1.0:D1b:::fabs 1179 1.1 christos "fabs" 1180 1.1 christos *am33_2 1181 1.1 christos { 1182 1.1 christos PC = cia; 1183 1.1 christos 1184 1.1 christos if (FPU_DISABLED) 1185 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1186 1.1 christos else 1187 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1188 1.1 christos } 1189 1.1 christos 1190 1.1 christos // 1111 1011 0100 0100 Sm.. ---- Sn.. X-Z-; fabs FSm,FSn 1191 1.1 christos 8.0xfb+8.0x44+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fabs 1192 1.1 christos "fabs" 1193 1.1 christos *am33_2 1194 1.1 christos { 1195 1.1 christos PC = cia; 1196 1.1 christos 1197 1.1 christos if (FPU_DISABLED) 1198 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1199 1.1 christos else 1200 1.1 christos { 1201 1.1 christos sim_fpu in, out; 1202 1.1 christos 1203 1.1 christos FS2FPU (XS2FS (X,Sm), in); 1204 1.1 christos sim_fpu_abs (&out, &in); 1205 1.1 christos FPU2FS (out, XS2FS (Z,Sn)); 1206 1.1 christos } 1207 1.1 christos } 1208 1.1 christos 1209 1.1 christos // 1111 1011 1100 0100 fm.- ---- fn.- X-Z-; fabs FDm,FDn 1210 1.1 christos 8.0xfb+8.0xc4+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fabs 1211 1.1 christos "fabs" 1212 1.1 christos *am33_2 1213 1.1 christos { 1214 1.1 christos PC = cia; 1215 1.1 christos 1216 1.1 christos if (FPU_DISABLED) 1217 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1218 1.1 christos else 1219 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1220 1.1 christos } 1221 1.1 christos 1222 1.1 christos // 1111 1001 0100 011X ---- Sn..; fneg FSn 1223 1.1 christos 8.0xf9+4.4,3.3,1.X+4.0,4.Sn:D1a:::fneg 1224 1.1 christos "fneg" 1225 1.1 christos *am33_2 1226 1.1 christos { 1227 1.1 christos PC = cia; 1228 1.1 christos 1229 1.1 christos if (FPU_DISABLED) 1230 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1231 1.1 christos else 1232 1.1 christos { 1233 1.1 christos sim_fpu in, out; 1234 1.1 christos 1235 1.1 christos FS2FPU (XS2FS (X,Sn), in); 1236 1.1 christos sim_fpu_neg (&out, &in); 1237 1.1 christos FPU2FS (out, XS2FS (X,Sn)); 1238 1.1 christos } 1239 1.1 christos } 1240 1.1 christos 1241 1.1 christos // 1111 1001 1100 011X ---- Sn..; fneg FDn 1242 1.1 christos 8.0xf9+4.0xc,3.3,1.X+4.0,3.fn,1.0:D1b:::fneg 1243 1.1 christos "fneg" 1244 1.1 christos *am33_2 1245 1.1 christos { 1246 1.1 christos PC = cia; 1247 1.1 christos 1248 1.1 christos if (FPU_DISABLED) 1249 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1250 1.1 christos else 1251 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1252 1.1 christos } 1253 1.1 christos 1254 1.1 christos // 1111 1011 0100 0110 Sm.. ---- Sn.. X-Z-; fneg FSm,FSn 1255 1.1 christos 8.0xfb+8.0x46+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fneg 1256 1.1 christos "fneg" 1257 1.1 christos *am33_2 1258 1.1 christos { 1259 1.1 christos PC = cia; 1260 1.1 christos 1261 1.1 christos if (FPU_DISABLED) 1262 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1263 1.1 christos else 1264 1.1 christos { 1265 1.1 christos sim_fpu in, out; 1266 1.1 christos 1267 1.1 christos FS2FPU (XS2FS (X,Sm), in); 1268 1.1 christos sim_fpu_neg (&out, &in); 1269 1.1 christos FPU2FS (out, XS2FS (Z,Sn)); 1270 1.1 christos } 1271 1.1 christos } 1272 1.1 christos 1273 1.1 christos // 1111 1011 1100 0110 fm.- ---- fn.- X-Z-; fneg FDm,FDn 1274 1.1 christos 8.0xfb+8.0xc6+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fneg 1275 1.1 christos "fneg" 1276 1.1 christos *am33_2 1277 1.1 christos { 1278 1.1 christos PC = cia; 1279 1.1 christos 1280 1.1 christos if (FPU_DISABLED) 1281 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1282 1.1 christos else 1283 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1284 1.1 christos } 1285 1.1 christos 1286 1.1 christos // 1111 1001 0101 000X ---- Sn..; frsqrt FSn 1287 1.1 christos 8.0xf9+4.5,3.0,1.X+4.0,4.Sn:D1a:::frsqrt 1288 1.1 christos "frsqrt" 1289 1.1 christos *am33_2 1290 1.1 christos { 1291 1.1 christos PC = cia; 1292 1.1 christos 1293 1.1 christos if (FPU_DISABLED) 1294 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1295 1.1 christos else 1296 1.1 christos fpu_rsqrt (SD, CPU, cia, &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE); 1297 1.1 christos } 1298 1.1 christos 1299 1.1 christos // 1111 1001 1101 000X ---- fn.-; frsqrt FDn 1300 1.1 christos 8.0xf9+4.0xd,3.0,1.X+4.0,3.fn,1.0:D1b:::frsqrt 1301 1.1 christos "frsqrt" 1302 1.1 christos *am33_2 1303 1.1 christos { 1304 1.1 christos PC = cia; 1305 1.1 christos 1306 1.1 christos if (FPU_DISABLED) 1307 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1308 1.1 christos else 1309 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1310 1.1 christos } 1311 1.1 christos 1312 1.1 christos // 1111 1011 0101 0000 Sm.. ---- Sn.. X-Z-; frsqrt FSm,FSn 1313 1.1 christos 8.0xfb+8.0x50+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::frsqrt 1314 1.1 christos "frsqrt" 1315 1.1 christos *am33_2 1316 1.1 christos { 1317 1.1 christos PC = cia; 1318 1.1 christos 1319 1.1 christos if (FPU_DISABLED) 1320 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1321 1.1 christos else 1322 1.1 christos fpu_rsqrt (SD, CPU, cia, &XS2FS (X,Sm), &XS2FS (Z,Sn), FP_SINGLE); 1323 1.1 christos } 1324 1.1 christos 1325 1.1 christos // 1111 1011 1101 0000 fm.- ---- fn.- X-Z-; frsqrt FDm,FDn 1326 1.1 christos 8.0xfb+8.0xd0+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::frsqrt 1327 1.1 christos "frsqrt" 1328 1.1 christos *am33_2 1329 1.1 christos { 1330 1.1 christos PC = cia; 1331 1.1 christos 1332 1.1 christos if (FPU_DISABLED) 1333 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1334 1.1 christos else 1335 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1336 1.1 christos } 1337 1.1 christos 1338 1.1 christos // 1111 1001 0101 001X ---- Sn..; fsqrt FSn 1339 1.1 christos 8.0xf9+4.5,3.1,1.X+4.0,4.Sn:D1a:::fsqrt 1340 1.1 christos "fsqrt" 1341 1.1 christos *am33_2 1342 1.1 christos { 1343 1.1 christos PC = cia; 1344 1.1 christos 1345 1.1 christos if (FPU_DISABLED) 1346 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1347 1.1 christos else 1348 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1349 1.1 christos } 1350 1.1 christos 1351 1.1 christos // 1111 1001 1101 001X ---- fn.-; fsqrt FDn 1352 1.1 christos 8.0xf9+4.0xd,3.1,1.X+4.0,3.fn,1.0:D1b:::fsqrt 1353 1.1 christos "fsqrt" 1354 1.1 christos *am33_2 1355 1.1 christos { 1356 1.1 christos PC = cia; 1357 1.1 christos 1358 1.1 christos if (FPU_DISABLED) 1359 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1360 1.1 christos else 1361 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1362 1.1 christos } 1363 1.1 christos 1364 1.1 christos // 1111 1011 0101 0100 Sm.. ---- Sn.. X-Z-; fsqrt FSm,FSn 1365 1.1 christos 8.0xfb+8.0x54+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fsqrt 1366 1.1 christos "fsqrt" 1367 1.1 christos *am33_2 1368 1.1 christos { 1369 1.1 christos PC = cia; 1370 1.1 christos 1371 1.1 christos if (FPU_DISABLED) 1372 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1373 1.1 christos else 1374 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1375 1.1 christos } 1376 1.1 christos 1377 1.1 christos // 1111 1011 1101 0100 fm.- ---- fn.- X-Z-; fsqrt FDm,FDn 1378 1.1 christos 8.0xfb+8.0xd4+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fsqrt 1379 1.1 christos "fsqrt" 1380 1.1 christos *am33_2 1381 1.1 christos { 1382 1.1 christos PC = cia; 1383 1.1 christos 1384 1.1 christos if (FPU_DISABLED) 1385 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1386 1.1 christos else 1387 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1388 1.1 christos } 1389 1.1 christos 1390 1.1 christos // 1111 1001 0101 01YX Sm.. Sn..; fcmp FSm, FSn 1391 1.1 christos 8.0xf9+4.5,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fcmp 1392 1.1 christos "fcmp" 1393 1.1 christos *am33_2 1394 1.1 christos { 1395 1.1 christos PC = cia; 1396 1.1 christos 1397 1.1 christos if (FPU_DISABLED) 1398 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1399 1.1 christos else 1400 1.1 christos fpu_cmp (SD, CPU, cia, &XS2FS (X,Sn), &XS2FS (Y,Sm), FP_SINGLE); 1401 1.1 christos } 1402 1.1 christos 1403 1.1 christos // 1111 1001 1101 01YX fm.- fn.-; fcmp FDm, FDn 1404 1.1 christos 8.0xf9+4.0xd,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fcmp 1405 1.1 christos "fcmp" 1406 1.1 christos *am33_2 1407 1.1 christos { 1408 1.1 christos PC = cia; 1409 1.1 christos 1410 1.1 christos if (FPU_DISABLED) 1411 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1412 1.1 christos else 1413 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1414 1.1 christos } 1415 1.1 christos 1416 1.1 christos // 1111 1110 0011 01Y1 Sm.. ---- IMM32; fcmp imm32, FSm 1417 1.1 christos 8.0xfe+4.3,2.1,1.Y,1.1+4.Sm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fcmp 1418 1.1 christos "fcmp" 1419 1.1 christos *am33_2 1420 1.1 christos { 1421 1.1 christos PC = cia; 1422 1.1 christos 1423 1.1 christos if (FPU_DISABLED) 1424 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1425 1.1 christos else 1426 1.1 christos { 1427 1.6 christos uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1428 1.1 christos 1429 1.1 christos fpu_cmp (SD, CPU, cia, &XS2FS (Y,Sm), &imm, FP_SINGLE); 1430 1.1 christos } 1431 1.1 christos } 1432 1.1 christos 1433 1.1 christos // 1111 1001 0110 00YX Sm.. Sn..; fadd FSm, FSn 1434 1.1 christos 8.0xf9+4.6,2.0,1.Y,1.X+4.Sm,4.Sn:D1a:::fadd 1435 1.1 christos "fadd" 1436 1.1 christos *am33_2 1437 1.1 christos { 1438 1.1 christos PC = cia; 1439 1.1 christos 1440 1.1 christos if (FPU_DISABLED) 1441 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1442 1.1 christos else 1443 1.1 christos fpu_add (SD, CPU, cia, 1444 1.1 christos &XS2FS (Y,Sm), &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE); 1445 1.1 christos } 1446 1.1 christos 1447 1.1 christos // 1111 1001 1110 00YX fm.- fn.-; fadd FDm, FDn 1448 1.1 christos 8.0xf9+4.0xe,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fadd 1449 1.1 christos "fadd" 1450 1.1 christos *am33_2 1451 1.1 christos { 1452 1.1 christos PC = cia; 1453 1.1 christos 1454 1.1 christos if (FPU_DISABLED) 1455 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1456 1.1 christos else 1457 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1458 1.1 christos } 1459 1.1 christos 1460 1.1 christos // 1111 1011 0110 0000 Sm1. Sm2. Sn.. XYZ-; fadd FSm1, FSm2, FSn 1461 1.1 christos 8.0xfb+8.0x60+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fadd 1462 1.1 christos "fadd" 1463 1.1 christos *am33_2 1464 1.1 christos { 1465 1.1 christos PC = cia; 1466 1.1 christos 1467 1.1 christos if (FPU_DISABLED) 1468 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1469 1.1 christos else 1470 1.1 christos fpu_add (SD, CPU, cia, 1471 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sn), FP_SINGLE); 1472 1.1 christos } 1473 1.1 christos 1474 1.1 christos // 1111 1011 1110 0000 fm1- fm2- fn.- XYZ-; fadd FDm1, FDm2, FDn 1475 1.1 christos 8.0xfb+8.0xe0+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fadd 1476 1.1 christos "fadd" 1477 1.1 christos *am33_2 1478 1.1 christos { 1479 1.1 christos PC = cia; 1480 1.1 christos 1481 1.1 christos if (FPU_DISABLED) 1482 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1483 1.1 christos else 1484 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1485 1.1 christos } 1486 1.1 christos 1487 1.1 christos 1488 1.1 christos // 1111 1110 0110 00YX Sm.. Sn.. IMM32; fadd imm32, FSm, FSn 1489 1.1 christos 8.0xfe+4.6,2.0,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fadd 1490 1.1 christos "fadd" 1491 1.1 christos *am33_2 1492 1.1 christos { 1493 1.1 christos PC = cia; 1494 1.1 christos 1495 1.1 christos if (FPU_DISABLED) 1496 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1497 1.1 christos else 1498 1.1 christos { 1499 1.6 christos uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1500 1.1 christos 1501 1.1 christos fpu_add (SD, CPU, cia, 1502 1.1 christos &XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE); 1503 1.1 christos } 1504 1.1 christos } 1505 1.1 christos 1506 1.1 christos // 1111 1001 0110 01YX Sm.. Sn..; fsub FSm, FSn 1507 1.1 christos 8.0xf9+4.6,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fsub 1508 1.1 christos "fsub" 1509 1.1 christos *am33_2 1510 1.1 christos { 1511 1.1 christos PC = cia; 1512 1.1 christos 1513 1.1 christos if (FPU_DISABLED) 1514 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1515 1.1 christos else 1516 1.1 christos fpu_sub (SD, CPU, cia, 1517 1.1 christos &XS2FS (X,Sn), &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE); 1518 1.1 christos } 1519 1.1 christos 1520 1.1 christos // 1111 1001 1110 01YX fm.- fn.-; fsub FDm, FDn 1521 1.1 christos 8.0xf9+4.0xe,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fsub 1522 1.1 christos "fsub" 1523 1.1 christos *am33_2 1524 1.1 christos { 1525 1.1 christos PC = cia; 1526 1.1 christos 1527 1.1 christos if (FPU_DISABLED) 1528 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1529 1.1 christos else 1530 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1531 1.1 christos } 1532 1.1 christos 1533 1.1 christos // 1111 1011 0110 0100 Sm1. Sm2. Sn.. XYZ-; fsub FSm1, FSm2, FSn 1534 1.1 christos 8.0xfb+8.0x64+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fsub 1535 1.1 christos "fsub" 1536 1.1 christos *am33_2 1537 1.1 christos { 1538 1.1 christos PC = cia; 1539 1.1 christos 1540 1.1 christos if (FPU_DISABLED) 1541 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1542 1.1 christos else 1543 1.1 christos fpu_sub (SD, CPU, cia, 1544 1.1 christos &XS2FS (Y,Sm2), &XS2FS (X,Sm1), &XS2FS (Z,Sn), FP_SINGLE); 1545 1.1 christos } 1546 1.1 christos 1547 1.1 christos // 1111 1011 1110 0100 fm1- fm2- fn.- XYZ-; fsub FDm1, FDm2, FDn 1548 1.1 christos 8.0xfb+8.0xe4+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fsub 1549 1.1 christos "fsub" 1550 1.1 christos *am33_2 1551 1.1 christos { 1552 1.1 christos PC = cia; 1553 1.1 christos 1554 1.1 christos if (FPU_DISABLED) 1555 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1556 1.1 christos else 1557 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1558 1.1 christos } 1559 1.1 christos 1560 1.1 christos 1561 1.1 christos // 1111 1110 0110 01YX Sm.. Sn.. IMM32; fsub imm32, FSm, FSn 1562 1.1 christos 8.0xfe+4.6,2.1,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fsub 1563 1.1 christos "fsub" 1564 1.1 christos *am33_2 1565 1.1 christos { 1566 1.1 christos PC = cia; 1567 1.1 christos 1568 1.1 christos if (FPU_DISABLED) 1569 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1570 1.1 christos else 1571 1.1 christos { 1572 1.6 christos uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1573 1.1 christos 1574 1.1 christos fpu_sub (SD, CPU, cia, 1575 1.1 christos &XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE); 1576 1.1 christos } 1577 1.1 christos } 1578 1.1 christos 1579 1.1 christos // 1111 1001 0111 00YX Sm.. Sn..; fmul FSm, FSn 1580 1.1 christos 8.0xf9+4.7,2.0,1.Y,1.X+4.Sm,4.Sn:D1a:::fmul 1581 1.1 christos "fmul" 1582 1.1 christos *am33_2 1583 1.1 christos { 1584 1.1 christos PC = cia; 1585 1.1 christos 1586 1.1 christos if (FPU_DISABLED) 1587 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1588 1.1 christos else 1589 1.1 christos fpu_mul (SD, CPU, cia, 1590 1.1 christos &XS2FS (Y,Sm), &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE); 1591 1.1 christos } 1592 1.1 christos 1593 1.1 christos // 1111 1001 1111 00YX fm.- fn.-; fmul FDm, FDn 1594 1.1 christos 8.0xf9+4.0xf,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fmul 1595 1.1 christos "fmul" 1596 1.1 christos *am33_2 1597 1.1 christos { 1598 1.1 christos PC = cia; 1599 1.1 christos 1600 1.1 christos if (FPU_DISABLED) 1601 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1602 1.1 christos else 1603 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1604 1.1 christos } 1605 1.1 christos 1606 1.1 christos // 1111 1011 0111 0000 Sm1. Sm2. Sn.. XYZ-; fmul FSm1, FSm2, FSn 1607 1.1 christos 8.0xfb+8.0x70+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fmul 1608 1.1 christos "fmul" 1609 1.1 christos *am33_2 1610 1.1 christos { 1611 1.1 christos PC = cia; 1612 1.1 christos 1613 1.1 christos if (FPU_DISABLED) 1614 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1615 1.1 christos else 1616 1.1 christos fpu_mul (SD, CPU, cia, 1617 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sn), FP_SINGLE); 1618 1.1 christos } 1619 1.1 christos 1620 1.1 christos // 1111 1011 1111 0000 fm1- fm2- fn.- XYZ-; fmul FDm1, FDm2, FDn 1621 1.1 christos 8.0xfb+8.0xf0+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fmul 1622 1.1 christos "fmul" 1623 1.1 christos *am33_2 1624 1.1 christos { 1625 1.1 christos PC = cia; 1626 1.1 christos 1627 1.1 christos if (FPU_DISABLED) 1628 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1629 1.1 christos else 1630 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1631 1.1 christos } 1632 1.1 christos 1633 1.1 christos 1634 1.1 christos // 1111 1110 0111 00YX Sm.. Sn.. IMM32; fmul imm32, FSm, FSn 1635 1.1 christos 8.0xfe+4.7,2.0,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fmul 1636 1.1 christos "fmul" 1637 1.1 christos *am33_2 1638 1.1 christos { 1639 1.1 christos PC = cia; 1640 1.1 christos 1641 1.1 christos if (FPU_DISABLED) 1642 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1643 1.1 christos else 1644 1.1 christos { 1645 1.6 christos uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1646 1.1 christos 1647 1.1 christos fpu_mul (SD, CPU, cia, 1648 1.1 christos &imm, &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE); 1649 1.1 christos } 1650 1.1 christos } 1651 1.1 christos 1652 1.1 christos // 1111 1001 0111 01YX Sm.. Sn..; fdiv FSm, FSn 1653 1.1 christos 8.0xf9+4.7,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fdiv 1654 1.1 christos "fdiv" 1655 1.1 christos *am33_2 1656 1.1 christos { 1657 1.1 christos PC = cia; 1658 1.1 christos 1659 1.1 christos if (FPU_DISABLED) 1660 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1661 1.1 christos else 1662 1.1 christos fpu_div (SD, CPU, cia, 1663 1.1 christos &XS2FS (X,Sn), &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE); 1664 1.1 christos } 1665 1.1 christos 1666 1.1 christos // 1111 1001 1111 01YX fm.- fn.-; fdiv FDm, FDn 1667 1.1 christos 8.0xf9+4.0xf,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fdiv 1668 1.1 christos "fdiv" 1669 1.1 christos *am33_2 1670 1.1 christos { 1671 1.1 christos PC = cia; 1672 1.1 christos 1673 1.1 christos if (FPU_DISABLED) 1674 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1675 1.1 christos else 1676 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1677 1.1 christos } 1678 1.1 christos 1679 1.1 christos // 1111 1011 0111 0100 Sm1. Sm2. Sn.. XYZ-; fdiv FSm1, FSm2, FSn 1680 1.1 christos 8.0xfb+8.0x74+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fdiv 1681 1.1 christos "fdiv" 1682 1.1 christos *am33_2 1683 1.1 christos { 1684 1.1 christos PC = cia; 1685 1.1 christos 1686 1.1 christos if (FPU_DISABLED) 1687 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1688 1.1 christos else 1689 1.1 christos fpu_div (SD, CPU, cia, 1690 1.1 christos &XS2FS (Y,Sm2), &XS2FS (X,Sm1), &XS2FS (Z,Sn), FP_SINGLE); 1691 1.1 christos } 1692 1.1 christos 1693 1.1 christos // 1111 1011 1111 0100 fm1- fm2- fn.- XYZ-; fdiv FDm1, FDm2, FDn 1694 1.1 christos 8.0xfb+8.0xf4+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fdiv 1695 1.1 christos "fdiv" 1696 1.1 christos *am33_2 1697 1.1 christos { 1698 1.1 christos PC = cia; 1699 1.1 christos 1700 1.1 christos if (FPU_DISABLED) 1701 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1702 1.1 christos else 1703 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1704 1.1 christos } 1705 1.1 christos 1706 1.1 christos 1707 1.1 christos // 1111 1110 0111 01YX Sm.. Sn.. IMM32; fdiv imm32, FSm, FSn 1708 1.1 christos 8.0xfe+4.7,2.1,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fdiv 1709 1.1 christos "fdiv" 1710 1.1 christos *am33_2 1711 1.1 christos { 1712 1.1 christos PC = cia; 1713 1.1 christos 1714 1.1 christos if (FPU_DISABLED) 1715 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1716 1.1 christos else 1717 1.1 christos { 1718 1.6 christos uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D); 1719 1.1 christos 1720 1.1 christos fpu_div (SD, CPU, cia, 1721 1.1 christos &XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE); 1722 1.1 christos } 1723 1.1 christos } 1724 1.1 christos 1725 1.1 christos // 1111 1011 1000 00Sn Sm1. Sm2. Sm3. XYZA; fmadd FSm1, FSm2, FSm3, FSn 1726 1.1 christos 8.0xfb+4.8,2.0,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fmadd 1727 1.1 christos "fmadd" 1728 1.1 christos *am33_2 1729 1.1 christos { 1730 1.1 christos PC = cia; 1731 1.1 christos 1732 1.1 christos if (FPU_DISABLED) 1733 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1734 1.1 christos else 1735 1.1 christos fpu_fmadd (SD, CPU, cia, 1736 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3), 1737 1.1 christos &AS2FS (A,Sn), FP_SINGLE); 1738 1.1 christos } 1739 1.1 christos 1740 1.1 christos // 1111 1011 1000 01Sn Sm1. Sm2. Sm3. XYZA; fmsub FSm1, FSm2, FSm3, FSn 1741 1.1 christos 8.0xfb+4.8,2.1,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fmsub 1742 1.1 christos "fmsub" 1743 1.1 christos *am33_2 1744 1.1 christos { 1745 1.1 christos PC = cia; 1746 1.1 christos 1747 1.1 christos if (FPU_DISABLED) 1748 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1749 1.1 christos else 1750 1.1 christos fpu_fmsub (SD, CPU, cia, 1751 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3), 1752 1.1 christos &AS2FS (A,Sn), FP_SINGLE); 1753 1.1 christos } 1754 1.1 christos 1755 1.1 christos // 1111 1011 1001 00Sn Sm1. Sm2. Sm3. XYZA; fnmadd FSm1, FSm2, FSm3, FSn 1756 1.1 christos 8.0xfb+4.9,2.0,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fnmadd 1757 1.1 christos "fnmadd" 1758 1.1 christos *am33_2 1759 1.1 christos { 1760 1.1 christos PC = cia; 1761 1.1 christos 1762 1.1 christos if (FPU_DISABLED) 1763 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1764 1.1 christos else 1765 1.1 christos fpu_fnmadd (SD, CPU, cia, 1766 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3), 1767 1.1 christos &AS2FS (A,Sn), FP_SINGLE); 1768 1.1 christos } 1769 1.1 christos 1770 1.1 christos // 1111 1011 1001 01Sn Sm1. Sm2. Sm3. XYZA; fnmsub FSm1, FSm2, FSm3, FSn 1771 1.1 christos 8.0xfb+4.9,2.1,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fnmsub 1772 1.1 christos "fnmsub" 1773 1.1 christos *am33_2 1774 1.1 christos { 1775 1.1 christos PC = cia; 1776 1.1 christos 1777 1.1 christos if (FPU_DISABLED) 1778 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1779 1.1 christos else 1780 1.1 christos fpu_fnmsub (SD, CPU, cia, 1781 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3), 1782 1.1 christos &AS2FS (A,Sn), FP_SINGLE); 1783 1.1 christos } 1784 1.1 christos 1785 1.1 christos // conversion: 1786 1.1 christos 1787 1.1 christos // 1111 1011 0100 0000 Sm.. ---- Sn.. X-Z-; ftoi FSm,FSn 1788 1.1 christos 8.0xfb+8.0x40+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::ftoi 1789 1.1 christos "ftoi" 1790 1.1 christos *am33_2 1791 1.1 christos { 1792 1.1 christos PC = cia; 1793 1.1 christos 1794 1.1 christos if (FPU_DISABLED) 1795 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1796 1.1 christos else 1797 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1798 1.1 christos } 1799 1.1 christos 1800 1.1 christos // 1111 1011 0100 0010 Sm.. ---- Sn.. X-Z-; itof FSm,FSn 1801 1.1 christos 8.0xfb+8.0x42+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::itof 1802 1.1 christos "itof" 1803 1.1 christos *am33_2 1804 1.1 christos { 1805 1.1 christos PC = cia; 1806 1.1 christos 1807 1.1 christos if (FPU_DISABLED) 1808 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1809 1.1 christos else 1810 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1811 1.1 christos } 1812 1.1 christos 1813 1.1 christos // 1111 1011 0101 0010 Sm.. ---- fn.- X-Z-; ftod FSm,FDn 1814 1.1 christos 8.0xfb+8.0x52+4.Sm,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2:::ftod 1815 1.1 christos "ftod" 1816 1.1 christos *am33_2 1817 1.1 christos { 1818 1.1 christos PC = cia; 1819 1.1 christos 1820 1.1 christos if (FPU_DISABLED) 1821 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1822 1.1 christos else 1823 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1824 1.1 christos } 1825 1.1 christos 1826 1.1 christos // 1111 1011 0101 0110 fm.- ---- Sn.. X-Z-; dtof FDm,FSn 1827 1.1 christos 8.0xfb+8.0x56+3.fm,1.0,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::dtof 1828 1.1 christos "dtof" 1829 1.1 christos *am33_2 1830 1.1 christos { 1831 1.1 christos PC = cia; 1832 1.1 christos 1833 1.1 christos if (FPU_DISABLED) 1834 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1835 1.1 christos else 1836 1.1 christos fpu_unimp_exception (SD, CPU, cia); 1837 1.1 christos } 1838 1.1 christos 1839 1.1 christos // branching: 1840 1.1 christos 1841 1.1 christos // 1111 1000 1101 0000 d8; fbeq (d8,PC) (d8 is sign-extended) 1842 1.1 christos 8.0xf8+8.0xd0+8.D8:D1:::fbeq 1843 1.1 christos "fbeq" 1844 1.1 christos *am33_2 1845 1.1 christos { 1846 1.1 christos PC = cia; 1847 1.1 christos 1848 1.1 christos if (FPU_DISABLED) 1849 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1850 1.1 christos else if ((FPCR & FCC_E)) 1851 1.1 christos { 1852 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 1853 1.1 christos nia = PC; 1854 1.1 christos } 1855 1.1 christos } 1856 1.1 christos 1857 1.1 christos // 1111 1000 1101 0001 d8; fbne (d8,PC) (d8 is sign-extended) 1858 1.1 christos 8.0xf8+8.0xd1+8.D8:D1:::fbne 1859 1.1 christos "fbne" 1860 1.1 christos *am33_2 1861 1.1 christos { 1862 1.1 christos PC = cia; 1863 1.1 christos 1864 1.1 christos if (FPU_DISABLED) 1865 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1866 1.1 christos else if ((FPCR & (FCC_U | FCC_L | FCC_G))) 1867 1.1 christos { 1868 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 1869 1.1 christos nia = PC; 1870 1.1 christos } 1871 1.1 christos } 1872 1.1 christos 1873 1.1 christos // 1111 1000 1101 0010 d8; fbgt (d8,PC) (d8 is sign-extended) 1874 1.1 christos 8.0xf8+8.0xd2+8.D8:D1:::fbgt 1875 1.1 christos "fbgt" 1876 1.1 christos *am33_2 1877 1.1 christos { 1878 1.1 christos PC = cia; 1879 1.1 christos 1880 1.1 christos if (FPU_DISABLED) 1881 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1882 1.1 christos else if ((FPCR & FCC_G)) 1883 1.1 christos { 1884 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 1885 1.1 christos nia = PC; 1886 1.1 christos } 1887 1.1 christos } 1888 1.1 christos 1889 1.1 christos // 1111 1000 1101 0011 d8; fbge (d8,PC) (d8 is sign-extended) 1890 1.1 christos 8.0xf8+8.0xd3+8.D8:D1:::fbge 1891 1.1 christos "fbge" 1892 1.1 christos *am33_2 1893 1.1 christos { 1894 1.1 christos PC = cia; 1895 1.1 christos 1896 1.1 christos if (FPU_DISABLED) 1897 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1898 1.1 christos else if ((FPCR & (FCC_G | FCC_E))) 1899 1.1 christos { 1900 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 1901 1.1 christos nia = PC; 1902 1.1 christos } 1903 1.1 christos } 1904 1.1 christos 1905 1.1 christos // 1111 1000 1101 0100 d8; fblt (d8,PC) (d8 is sign-extended) 1906 1.1 christos 8.0xf8+8.0xd4+8.D8:D1:::fblt 1907 1.1 christos "fblt" 1908 1.1 christos *am33_2 1909 1.1 christos { 1910 1.1 christos PC = cia; 1911 1.1 christos 1912 1.1 christos if (FPU_DISABLED) 1913 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1914 1.1 christos else if ((FPCR & FCC_L)) 1915 1.1 christos { 1916 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 1917 1.1 christos nia = PC; 1918 1.1 christos } 1919 1.1 christos } 1920 1.1 christos 1921 1.1 christos // 1111 1000 1101 0101 d8; fble (d8,PC) (d8 is sign-extended) 1922 1.1 christos 8.0xf8+8.0xd5+8.D8:D1:::fble 1923 1.1 christos "fble" 1924 1.1 christos *am33_2 1925 1.1 christos { 1926 1.1 christos PC = cia; 1927 1.1 christos 1928 1.1 christos if (FPU_DISABLED) 1929 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1930 1.1 christos else if ((FPCR & (FCC_L | FCC_E))) 1931 1.1 christos { 1932 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 1933 1.1 christos nia = PC; 1934 1.1 christos } 1935 1.1 christos } 1936 1.1 christos 1937 1.1 christos // 1111 1000 1101 0110 d8; fbuo (d8,PC) (d8 is sign-extended) 1938 1.1 christos 8.0xf8+8.0xd6+8.D8:D1:::fbuo 1939 1.1 christos "fbuo" 1940 1.1 christos *am33_2 1941 1.1 christos { 1942 1.1 christos PC = cia; 1943 1.1 christos 1944 1.1 christos if (FPU_DISABLED) 1945 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1946 1.1 christos else if ((FPCR & FCC_U)) 1947 1.1 christos { 1948 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 1949 1.1 christos nia = PC; 1950 1.1 christos } 1951 1.1 christos } 1952 1.1 christos 1953 1.1 christos // 1111 1000 1101 0111 d8; fblg (d8,PC) (d8 is sign-extended) 1954 1.1 christos 8.0xf8+8.0xd7+8.D8:D1:::fblg 1955 1.1 christos "fblg" 1956 1.1 christos *am33_2 1957 1.1 christos { 1958 1.1 christos PC = cia; 1959 1.1 christos 1960 1.1 christos if (FPU_DISABLED) 1961 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1962 1.1 christos else if ((FPCR & (FCC_L | FCC_G))) 1963 1.1 christos { 1964 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 1965 1.1 christos nia = PC; 1966 1.1 christos } 1967 1.1 christos } 1968 1.1 christos // 1111 1000 1101 1000 d8; fbleg (d8,PC) (d8 is sign-extended) 1969 1.1 christos 8.0xf8+8.0xd8+8.D8:D1:::fbleg 1970 1.1 christos "fbleg" 1971 1.1 christos *am33_2 1972 1.1 christos { 1973 1.1 christos PC = cia; 1974 1.1 christos 1975 1.1 christos if (FPU_DISABLED) 1976 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1977 1.1 christos else if ((FPCR & (FCC_L | FCC_E | FCC_G))) 1978 1.1 christos { 1979 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 1980 1.1 christos nia = PC; 1981 1.1 christos } 1982 1.1 christos } 1983 1.1 christos 1984 1.1 christos // 1111 1000 1101 1001 d8; fbug (d8,PC) (d8 is sign-extended) 1985 1.1 christos 8.0xf8+8.0xd9+8.D8:D1:::fbug 1986 1.1 christos "fbug" 1987 1.1 christos *am33_2 1988 1.1 christos { 1989 1.1 christos PC = cia; 1990 1.1 christos 1991 1.1 christos if (FPU_DISABLED) 1992 1.1 christos fpu_disabled_exception (SD, CPU, cia); 1993 1.1 christos else if ((FPCR & (FCC_U | FCC_G))) 1994 1.1 christos { 1995 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 1996 1.1 christos nia = PC; 1997 1.1 christos } 1998 1.1 christos } 1999 1.1 christos 2000 1.1 christos // 1111 1000 1101 1010 d8; fbuge (d8,PC) (d8 is sign-extended) 2001 1.1 christos 8.0xf8+8.0xda+8.D8:D1:::fbuge 2002 1.1 christos "fbuge" 2003 1.1 christos *am33_2 2004 1.1 christos { 2005 1.1 christos PC = cia; 2006 1.1 christos 2007 1.1 christos if (FPU_DISABLED) 2008 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2009 1.1 christos else if ((FPCR & (FCC_U | FCC_G | FCC_E))) 2010 1.1 christos { 2011 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 2012 1.1 christos nia = PC; 2013 1.1 christos } 2014 1.1 christos } 2015 1.1 christos 2016 1.1 christos // 1111 1000 1101 1011 d8; fbul (d8,PC) (d8 is sign-extended) 2017 1.1 christos 8.0xf8+8.0xdb+8.D8:D1:::fbul 2018 1.1 christos "fbul" 2019 1.1 christos *am33_2 2020 1.1 christos { 2021 1.1 christos PC = cia; 2022 1.1 christos 2023 1.1 christos if (FPU_DISABLED) 2024 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2025 1.1 christos else if ((FPCR & (FCC_U | FCC_L))) 2026 1.1 christos { 2027 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 2028 1.1 christos nia = PC; 2029 1.1 christos } 2030 1.1 christos } 2031 1.1 christos 2032 1.1 christos // 1111 1000 1101 1100 d8; fbule (d8,PC) (d8 is sign-extended) 2033 1.1 christos 8.0xf8+8.0xdc+8.D8:D1:::fbule 2034 1.1 christos "fbule" 2035 1.1 christos *am33_2 2036 1.1 christos { 2037 1.1 christos PC = cia; 2038 1.1 christos 2039 1.1 christos if (FPU_DISABLED) 2040 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2041 1.1 christos else if ((FPCR & (FCC_U | FCC_L | FCC_E))) 2042 1.1 christos { 2043 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 2044 1.1 christos nia = PC; 2045 1.1 christos } 2046 1.1 christos } 2047 1.1 christos 2048 1.1 christos // 1111 1000 1101 1101 d8; fbue (d8,PC) (d8 is sign-extended) 2049 1.1 christos 8.0xf8+8.0xdd+8.D8:D1:::fbue 2050 1.1 christos "fbue" 2051 1.1 christos *am33_2 2052 1.1 christos { 2053 1.1 christos PC = cia; 2054 1.1 christos 2055 1.1 christos if (FPU_DISABLED) 2056 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2057 1.1 christos else if ((FPCR & (FCC_U | FCC_E))) 2058 1.1 christos { 2059 1.1 christos State.regs[REG_PC] += EXTEND8 (D8); 2060 1.1 christos nia = PC; 2061 1.1 christos } 2062 1.1 christos } 2063 1.1 christos 2064 1.1 christos // 1111 0000 1101 0000; fleq 2065 1.1 christos 8.0xf0+8.0xd0:D0:::fleq 2066 1.1 christos "fleq" 2067 1.1 christos *am33_2 2068 1.1 christos { 2069 1.1 christos PC = cia; 2070 1.1 christos 2071 1.1 christos if (FPU_DISABLED) 2072 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2073 1.1 christos else if ((FPCR & FCC_E)) 2074 1.1 christos { 2075 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2076 1.1 christos nia = PC; 2077 1.1 christos } 2078 1.1 christos } 2079 1.1 christos 2080 1.1 christos // 1111 0000 1101 0001; flne 2081 1.1 christos 8.0xf0+8.0xd1:D0:::flne 2082 1.1 christos "flne" 2083 1.1 christos *am33_2 2084 1.1 christos { 2085 1.1 christos PC = cia; 2086 1.1 christos 2087 1.1 christos if (FPU_DISABLED) 2088 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2089 1.1 christos else if ((FPCR & (FCC_U | FCC_L | FCC_G))) 2090 1.1 christos { 2091 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2092 1.1 christos nia = PC; 2093 1.1 christos } 2094 1.1 christos } 2095 1.1 christos 2096 1.1 christos // 1111 0000 1101 0010; flgt 2097 1.1 christos 8.0xf0+8.0xd2:D0:::flgt 2098 1.1 christos "flgt" 2099 1.1 christos *am33_2 2100 1.1 christos { 2101 1.1 christos PC = cia; 2102 1.1 christos 2103 1.1 christos if (FPU_DISABLED) 2104 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2105 1.1 christos else if ((FPCR & FCC_G)) 2106 1.1 christos { 2107 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2108 1.1 christos nia = PC; 2109 1.1 christos } 2110 1.1 christos } 2111 1.1 christos 2112 1.1 christos // 1111 0000 1101 0011; flge 2113 1.1 christos 8.0xf0+8.0xd3:D0:::flge 2114 1.1 christos "flge" 2115 1.1 christos *am33_2 2116 1.1 christos { 2117 1.1 christos PC = cia; 2118 1.1 christos 2119 1.1 christos if (FPU_DISABLED) 2120 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2121 1.1 christos else if ((FPCR & (FCC_G | FCC_E))) 2122 1.1 christos { 2123 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2124 1.1 christos nia = PC; 2125 1.1 christos } 2126 1.1 christos } 2127 1.1 christos 2128 1.1 christos // 1111 0000 1101 0100; fllt 2129 1.1 christos 8.0xf0+8.0xd4:D0:::fllt 2130 1.1 christos "fllt" 2131 1.1 christos *am33_2 2132 1.1 christos { 2133 1.1 christos PC = cia; 2134 1.1 christos 2135 1.1 christos if (FPU_DISABLED) 2136 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2137 1.1 christos else if ((FPCR & FCC_L)) 2138 1.1 christos { 2139 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2140 1.1 christos nia = PC; 2141 1.1 christos } 2142 1.1 christos } 2143 1.1 christos 2144 1.1 christos // 1111 0000 1101 0101; flle 2145 1.1 christos 8.0xf0+8.0xd5:D0:::flle 2146 1.1 christos "flle" 2147 1.1 christos *am33_2 2148 1.1 christos { 2149 1.1 christos PC = cia; 2150 1.1 christos 2151 1.1 christos if (FPU_DISABLED) 2152 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2153 1.1 christos else if ((FPCR & (FCC_L | FCC_E))) 2154 1.1 christos { 2155 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2156 1.1 christos nia = PC; 2157 1.1 christos } 2158 1.1 christos } 2159 1.1 christos 2160 1.1 christos // 1111 0000 1101 0110; fluo 2161 1.1 christos 8.0xf0+8.0xd6:D0:::fluo 2162 1.1 christos "fluo" 2163 1.1 christos *am33_2 2164 1.1 christos { 2165 1.1 christos PC = cia; 2166 1.1 christos 2167 1.1 christos if (FPU_DISABLED) 2168 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2169 1.1 christos else if ((FPCR & FCC_U)) 2170 1.1 christos { 2171 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2172 1.1 christos nia = PC; 2173 1.1 christos } 2174 1.1 christos } 2175 1.1 christos 2176 1.1 christos // 1111 0000 1101 0111; fllg 2177 1.1 christos 8.0xf0+8.0xd7:D0:::fllg 2178 1.1 christos "fllg" 2179 1.1 christos *am33_2 2180 1.1 christos { 2181 1.1 christos PC = cia; 2182 1.1 christos 2183 1.1 christos if (FPU_DISABLED) 2184 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2185 1.1 christos else if ((FPCR & (FCC_L | FCC_G))) 2186 1.1 christos { 2187 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2188 1.1 christos nia = PC; 2189 1.1 christos } 2190 1.1 christos } 2191 1.1 christos // 1111 0000 1101 1000; flleg 2192 1.1 christos 8.0xf0+8.0xd8:D0:::flleg 2193 1.1 christos "flleg" 2194 1.1 christos *am33_2 2195 1.1 christos { 2196 1.1 christos PC = cia; 2197 1.1 christos 2198 1.1 christos if (FPU_DISABLED) 2199 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2200 1.1 christos else if ((FPCR & (FCC_L | FCC_E | FCC_G))) 2201 1.1 christos { 2202 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2203 1.1 christos nia = PC; 2204 1.1 christos } 2205 1.1 christos } 2206 1.1 christos 2207 1.1 christos // 1111 0000 1101 1001; flug 2208 1.1 christos 8.0xf0+8.0xd9:D0:::flug 2209 1.1 christos "flug" 2210 1.1 christos *am33_2 2211 1.1 christos { 2212 1.1 christos PC = cia; 2213 1.1 christos 2214 1.1 christos if (FPU_DISABLED) 2215 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2216 1.1 christos else if ((FPCR & (FCC_U | FCC_G))) 2217 1.1 christos { 2218 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2219 1.1 christos nia = PC; 2220 1.1 christos } 2221 1.1 christos } 2222 1.1 christos 2223 1.1 christos // 1111 0000 1101 1010; fluge 2224 1.1 christos 8.0xf0+8.0xda:D0:::fluge 2225 1.1 christos "fluge" 2226 1.1 christos *am33_2 2227 1.1 christos { 2228 1.1 christos PC = cia; 2229 1.1 christos 2230 1.1 christos if (FPU_DISABLED) 2231 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2232 1.1 christos else if ((FPCR & (FCC_U | FCC_G | FCC_E))) 2233 1.1 christos { 2234 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2235 1.1 christos nia = PC; 2236 1.1 christos } 2237 1.1 christos } 2238 1.1 christos 2239 1.1 christos // 1111 0000 1101 1011; flul 2240 1.1 christos 8.0xf0+8.0xdb:D0:::flul 2241 1.1 christos "flul" 2242 1.1 christos *am33_2 2243 1.1 christos { 2244 1.1 christos PC = cia; 2245 1.1 christos 2246 1.1 christos if (FPU_DISABLED) 2247 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2248 1.1 christos else if ((FPCR & (FCC_U | FCC_L))) 2249 1.1 christos { 2250 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2251 1.1 christos nia = PC; 2252 1.1 christos } 2253 1.1 christos } 2254 1.1 christos 2255 1.1 christos // 1111 0000 1101 1100; flule 2256 1.1 christos 8.0xf0+8.0xdc:D0:::flule 2257 1.1 christos "flule" 2258 1.1 christos *am33_2 2259 1.1 christos { 2260 1.1 christos PC = cia; 2261 1.1 christos 2262 1.1 christos if (FPU_DISABLED) 2263 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2264 1.1 christos else if ((FPCR & (FCC_U | FCC_L | FCC_E))) 2265 1.1 christos { 2266 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2267 1.1 christos nia = PC; 2268 1.1 christos } 2269 1.1 christos } 2270 1.1 christos 2271 1.1 christos // 1111 0000 1101 1101; flue 2272 1.1 christos 8.0xf0+8.0xdd:D0:::flue 2273 1.1 christos "flue" 2274 1.1 christos *am33_2 2275 1.1 christos { 2276 1.1 christos PC = cia; 2277 1.1 christos 2278 1.1 christos if (FPU_DISABLED) 2279 1.1 christos fpu_disabled_exception (SD, CPU, cia); 2280 1.1 christos else if ((FPCR & (FCC_U | FCC_E))) 2281 1.1 christos { 2282 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4; 2283 1.1 christos nia = PC; 2284 1.1 christos } 2285 1.1 christos } 2286