Previous 199869 Revisions Next

r26348 Friday 22nd November, 2013 at 00:50:39 UTC by Barry Rodewald
i386: Fixed P6 CMOVcc instructions, and added CMOV feature flag to Pentium Pro and Pentium II CPUs.  Added MMX feature flag to Pentium MMX. [Barry Rodewald]
[src/emu/cpu/i386]i386.c pentops.c

trunk/src/emu/cpu/i386/pentops.c
r26347r26348
204204   UINT16 src;
205205   UINT8 modrm = FETCH(cpustate);
206206
207   if (cpustate->OF == 1) {
208      if( modrm >= 0xc0 ) {
207   if( modrm >= 0xc0 )
208   {
209      if (cpustate->OF == 1)
210      {
209211         src = LOAD_RM16(modrm);
210212         STORE_REG16(modrm, src);
211         CYCLES(cpustate,1); // TODO: correct cycle count
212      } else {
213         UINT32 ea = GetEA(cpustate,modrm,0);
213      }
214      CYCLES(cpustate,1); // TODO: correct cycle count
215   }
216   else
217   {
218      UINT32 ea = GetEA(cpustate,modrm,0);
219      if (cpustate->OF == 1)
220      {
214221         src = READ16(cpustate,ea);
215222         STORE_REG16(modrm, src);
216         CYCLES(cpustate,1); // TODO: correct cycle count
217223      }
224      CYCLES(cpustate,1); // TODO: correct cycle count
218225   }
219226}
220227
r26347r26348
223230   UINT32 src;
224231   UINT8 modrm = FETCH(cpustate);
225232
226   if (cpustate->OF == 1) {
227      if( modrm >= 0xc0 ) {
233   if( modrm >= 0xc0 )
234   {
235      if (cpustate->OF == 1)
236      {
228237         src = LOAD_RM32(modrm);
229238         STORE_REG32(modrm, src);
230         CYCLES(cpustate,1); // TODO: correct cycle count
231      } else {
232         UINT32 ea = GetEA(cpustate,modrm,0);
239      }
240      CYCLES(cpustate,1); // TODO: correct cycle count
241   }
242   else
243   {
244      UINT32 ea = GetEA(cpustate,modrm,0);
245      if (cpustate->OF == 1)
246      {
233247         src = READ32(cpustate,ea);
234248         STORE_REG32(modrm, src);
235         CYCLES(cpustate,1); // TODO: correct cycle count
236249      }
250      CYCLES(cpustate,1); // TODO: correct cycle count
237251   }
238252}
239253
r26347r26348
242256   UINT16 src;
243257   UINT8 modrm = FETCH(cpustate);
244258
245   if (cpustate->OF == 0) {
246      if( modrm >= 0xc0 ) {
259   if( modrm >= 0xc0 )
260   {
261      if (cpustate->OF == 0)
262      {
247263         src = LOAD_RM16(modrm);
248264         STORE_REG16(modrm, src);
249         CYCLES(cpustate,1); // TODO: correct cycle count
250      } else {
251         UINT32 ea = GetEA(cpustate,modrm,0);
265      }
266      CYCLES(cpustate,1); // TODO: correct cycle count
267   }
268   else
269   {
270      UINT32 ea = GetEA(cpustate,modrm,0);
271      if (cpustate->OF == 0)
272      {
252273         src = READ16(cpustate,ea);
253274         STORE_REG16(modrm, src);
254         CYCLES(cpustate,1); // TODO: correct cycle count
255275      }
276      CYCLES(cpustate,1); // TODO: correct cycle count
256277   }
257278}
258279
r26347r26348
261282   UINT32 src;
262283   UINT8 modrm = FETCH(cpustate);
263284
264   if (cpustate->OF == 0) {
265      if( modrm >= 0xc0 ) {
285   if( modrm >= 0xc0 )
286   {
287      if (cpustate->OF == 0)
288      {
266289         src = LOAD_RM32(modrm);
267290         STORE_REG32(modrm, src);
268         CYCLES(cpustate,1); // TODO: correct cycle count
269      } else {
270         UINT32 ea = GetEA(cpustate,modrm,0);
291      }
292      CYCLES(cpustate,1); // TODO: correct cycle count
293   }
294   else
295   {
296      UINT32 ea = GetEA(cpustate,modrm,0);
297      if (cpustate->OF == 0)
298      {
271299         src = READ32(cpustate,ea);
272300         STORE_REG32(modrm, src);
273         CYCLES(cpustate,1); // TODO: correct cycle count
274301      }
302      CYCLES(cpustate,1); // TODO: correct cycle count
275303   }
276304}
277305
r26347r26348
280308   UINT16 src;
281309   UINT8 modrm = FETCH(cpustate);
282310
283   if (cpustate->CF == 1) {
284      if( modrm >= 0xc0 ) {
311   if( modrm >= 0xc0 )
312   {
313      if (cpustate->CF == 1)
314      {
285315         src = LOAD_RM16(modrm);
286316         STORE_REG16(modrm, src);
287         CYCLES(cpustate,1); // TODO: correct cycle count
288      } else {
289         UINT32 ea = GetEA(cpustate,modrm,0);
317      }
318      CYCLES(cpustate,1); // TODO: correct cycle count
319   }
320   else
321   {
322      UINT32 ea = GetEA(cpustate,modrm,0);
323      if (cpustate->CF == 1)
324      {
290325         src = READ16(cpustate,ea);
291326         STORE_REG16(modrm, src);
292         CYCLES(cpustate,1); // TODO: correct cycle count
293327      }
328      CYCLES(cpustate,1); // TODO: correct cycle count
294329   }
295330}
296331
r26347r26348
299334   UINT32 src;
300335   UINT8 modrm = FETCH(cpustate);
301336
302   if (cpustate->CF == 1) {
303      if( modrm >= 0xc0 ) {
337   if( modrm >= 0xc0 )
338   {
339      if (cpustate->CF == 1)
340      {
304341         src = LOAD_RM32(modrm);
305342         STORE_REG32(modrm, src);
306         CYCLES(cpustate,1); // TODO: correct cycle count
307      } else {
308         UINT32 ea = GetEA(cpustate,modrm,0);
343      }
344      CYCLES(cpustate,1); // TODO: correct cycle count
345   }
346   else
347   {
348      UINT32 ea = GetEA(cpustate,modrm,0);
349      if (cpustate->CF == 1)
350      {
309351         src = READ32(cpustate,ea);
310352         STORE_REG32(modrm, src);
311         CYCLES(cpustate,1); // TODO: correct cycle count
312353      }
354      CYCLES(cpustate,1); // TODO: correct cycle count
313355   }
314356}
315357
r26347r26348
318360   UINT16 src;
319361   UINT8 modrm = FETCH(cpustate);
320362
321   if (cpustate->CF == 0) {
322      if( modrm >= 0xc0 ) {
363   if( modrm >= 0xc0 )
364   {
365      if (cpustate->CF == 0)
366      {
323367         src = LOAD_RM16(modrm);
324368         STORE_REG16(modrm, src);
325         CYCLES(cpustate,1); // TODO: correct cycle count
326      } else {
327         UINT32 ea = GetEA(cpustate,modrm,0);
369      }
370      CYCLES(cpustate,1); // TODO: correct cycle count
371   }
372   else
373   {
374      UINT32 ea = GetEA(cpustate,modrm,0);
375      if (cpustate->CF == 0)
376      {
328377         src = READ16(cpustate,ea);
329378         STORE_REG16(modrm, src);
330         CYCLES(cpustate,1); // TODO: correct cycle count
331379      }
380      CYCLES(cpustate,1); // TODO: correct cycle count
332381   }
333382}
334383
r26347r26348
337386   UINT32 src;
338387   UINT8 modrm = FETCH(cpustate);
339388
340   if (cpustate->CF == 0) {
341      if( modrm >= 0xc0 ) {
389   if( modrm >= 0xc0 )
390   {
391      if (cpustate->CF == 0)
392      {
342393         src = LOAD_RM32(modrm);
343394         STORE_REG32(modrm, src);
344         CYCLES(cpustate,1); // TODO: correct cycle count
345      } else {
346         UINT32 ea = GetEA(cpustate,modrm,0);
395      }
396      CYCLES(cpustate,1); // TODO: correct cycle count
397   }
398   else
399   {
400      UINT32 ea = GetEA(cpustate,modrm,0);
401      if (cpustate->CF == 0)
402      {
347403         src = READ32(cpustate,ea);
348404         STORE_REG32(modrm, src);
349         CYCLES(cpustate,1); // TODO: correct cycle count
350405      }
406      CYCLES(cpustate,1); // TODO: correct cycle count
351407   }
352408}
353409
r26347r26348
356412   UINT16 src;
357413   UINT8 modrm = FETCH(cpustate);
358414
359   if (cpustate->ZF == 1) {
360      if( modrm >= 0xc0 ) {
415   if( modrm >= 0xc0 )
416   {
417      if (cpustate->ZF == 1)
418      {
361419         src = LOAD_RM16(modrm);
362420         STORE_REG16(modrm, src);
363         CYCLES(cpustate,1); // TODO: correct cycle count
364      } else {
365         UINT32 ea = GetEA(cpustate,modrm,0);
421      }
422      CYCLES(cpustate,1); // TODO: correct cycle count
423   }
424   else
425   {
426      UINT32 ea = GetEA(cpustate,modrm,0);
427      if (cpustate->ZF == 1)
428      {
366429         src = READ16(cpustate,ea);
367430         STORE_REG16(modrm, src);
368         CYCLES(cpustate,1); // TODO: correct cycle count
369431      }
432      CYCLES(cpustate,1); // TODO: correct cycle count
370433   }
371434}
372435
r26347r26348
375438   UINT32 src;
376439   UINT8 modrm = FETCH(cpustate);
377440
378   if (cpustate->ZF == 1) {
379      if( modrm >= 0xc0 ) {
441   if( modrm >= 0xc0 )
442   {
443      if (cpustate->ZF == 1)
444      {
380445         src = LOAD_RM32(modrm);
381446         STORE_REG32(modrm, src);
382         CYCLES(cpustate,1); // TODO: correct cycle count
383      } else {
384         UINT32 ea = GetEA(cpustate,modrm,0);
447      }
448      CYCLES(cpustate,1); // TODO: correct cycle count
449   }
450   else
451   {
452      UINT32 ea = GetEA(cpustate,modrm,0);
453      if (cpustate->ZF == 1)
454      {
385455         src = READ32(cpustate,ea);
386456         STORE_REG32(modrm, src);
387         CYCLES(cpustate,1); // TODO: correct cycle count
388457      }
458      CYCLES(cpustate,1); // TODO: correct cycle count
389459   }
390460}
391461
r26347r26348
394464   UINT16 src;
395465   UINT8 modrm = FETCH(cpustate);
396466
397   if (cpustate->ZF == 0) {
398      if( modrm >= 0xc0 ) {
467   if( modrm >= 0xc0 )
468   {
469      if (cpustate->ZF == 0)
470      {
399471         src = LOAD_RM16(modrm);
400472         STORE_REG16(modrm, src);
401         CYCLES(cpustate,1); // TODO: correct cycle count
402      } else {
403         UINT32 ea = GetEA(cpustate,modrm,0);
473      }
474      CYCLES(cpustate,1); // TODO: correct cycle count
475   }
476   else
477   {
478      UINT32 ea = GetEA(cpustate,modrm,0);
479      if (cpustate->ZF == 0)
480      {
404481         src = READ16(cpustate,ea);
405482         STORE_REG16(modrm, src);
406         CYCLES(cpustate,1); // TODO: correct cycle count
407483      }
484      CYCLES(cpustate,1); // TODO: correct cycle count
408485   }
409486}
410487
r26347r26348
413490   UINT32 src;
414491   UINT8 modrm = FETCH(cpustate);
415492
416   if (cpustate->ZF == 0) {
417      if( modrm >= 0xc0 ) {
493   if( modrm >= 0xc0 )
494   {
495      if (cpustate->ZF == 0)
496      {
418497         src = LOAD_RM32(modrm);
419498         STORE_REG32(modrm, src);
420         CYCLES(cpustate,1); // TODO: correct cycle count
421      } else {
422         UINT32 ea = GetEA(cpustate,modrm,0);
499      }
500      CYCLES(cpustate,1); // TODO: correct cycle count
501   }
502   else
503   {
504      UINT32 ea = GetEA(cpustate,modrm,0);
505      if (cpustate->ZF == 0)
506      {
423507         src = READ32(cpustate,ea);
424508         STORE_REG32(modrm, src);
425         CYCLES(cpustate,1); // TODO: correct cycle count
426509      }
510      CYCLES(cpustate,1); // TODO: correct cycle count
427511   }
428512}
429513
r26347r26348
432516   UINT16 src;
433517   UINT8 modrm = FETCH(cpustate);
434518
435   if ((cpustate->CF == 1) || (cpustate->ZF == 1)) {
436      if( modrm >= 0xc0 ) {
519   if( modrm >= 0xc0 )
520   {
521      if ((cpustate->CF == 1) || (cpustate->ZF == 1))
522      {
437523         src = LOAD_RM16(modrm);
438524         STORE_REG16(modrm, src);
439         CYCLES(cpustate,1); // TODO: correct cycle count
440      } else {
441         UINT32 ea = GetEA(cpustate,modrm,0);
525      }
526      CYCLES(cpustate,1); // TODO: correct cycle count
527   }
528   else
529   {
530      UINT32 ea = GetEA(cpustate,modrm,0);
531      if ((cpustate->CF == 1) || (cpustate->ZF == 1))
532      {
442533         src = READ16(cpustate,ea);
443534         STORE_REG16(modrm, src);
444         CYCLES(cpustate,1); // TODO: correct cycle count
445535      }
536      CYCLES(cpustate,1); // TODO: correct cycle count
446537   }
447538}
448539
r26347r26348
451542   UINT32 src;
452543   UINT8 modrm = FETCH(cpustate);
453544
454   if ((cpustate->CF == 1) || (cpustate->ZF == 1)) {
455      if( modrm >= 0xc0 ) {
545   if( modrm >= 0xc0 )
546   {
547      if ((cpustate->CF == 1) || (cpustate->ZF == 1))
548      {
456549         src = LOAD_RM32(modrm);
457550         STORE_REG32(modrm, src);
458         CYCLES(cpustate,1); // TODO: correct cycle count
459      } else {
460         UINT32 ea = GetEA(cpustate,modrm,0);
551      }
552      CYCLES(cpustate,1); // TODO: correct cycle count
553   }
554   else
555   {
556      UINT32 ea = GetEA(cpustate,modrm,0);
557      if ((cpustate->CF == 1) || (cpustate->ZF == 1))
558      {
461559         src = READ32(cpustate,ea);
462560         STORE_REG32(modrm, src);
463         CYCLES(cpustate,1); // TODO: correct cycle count
464561      }
562      CYCLES(cpustate,1); // TODO: correct cycle count
465563   }
466564}
467565
r26347r26348
470568   UINT16 src;
471569   UINT8 modrm = FETCH(cpustate);
472570
473   if ((cpustate->CF == 0) && (cpustate->ZF == 0)) {
474      if( modrm >= 0xc0 ) {
571   if( modrm >= 0xc0 )
572   {
573      if ((cpustate->CF == 0) && (cpustate->ZF == 0))
574      {
475575         src = LOAD_RM16(modrm);
476576         STORE_REG16(modrm, src);
477         CYCLES(cpustate,1); // TODO: correct cycle count
478      } else {
479         UINT32 ea = GetEA(cpustate,modrm,0);
577      }
578      CYCLES(cpustate,1); // TODO: correct cycle count
579   }
580   else
581   {
582      UINT32 ea = GetEA(cpustate,modrm,0);
583      if ((cpustate->CF == 0) && (cpustate->ZF == 0))
584      {
480585         src = READ16(cpustate,ea);
481586         STORE_REG16(modrm, src);
482         CYCLES(cpustate,1); // TODO: correct cycle count
483587      }
588      CYCLES(cpustate,1); // TODO: correct cycle count
484589   }
485590}
486591
r26347r26348
489594   UINT32 src;
490595   UINT8 modrm = FETCH(cpustate);
491596
492   if ((cpustate->CF == 0) && (cpustate->ZF == 0)) {
493      if( modrm >= 0xc0 ) {
597   if( modrm >= 0xc0 )
598   {
599      if ((cpustate->CF == 0) && (cpustate->ZF == 0))
600      {
494601         src = LOAD_RM32(modrm);
495602         STORE_REG32(modrm, src);
496         CYCLES(cpustate,1); // TODO: correct cycle count
497      } else {
498         UINT32 ea = GetEA(cpustate,modrm,0);
603      }
604      CYCLES(cpustate,1); // TODO: correct cycle count
605   }
606   else
607   {
608      UINT32 ea = GetEA(cpustate,modrm,0);
609      if ((cpustate->CF == 0) && (cpustate->ZF == 0))
610      {
499611         src = READ32(cpustate,ea);
500612         STORE_REG32(modrm, src);
501         CYCLES(cpustate,1); // TODO: correct cycle count
502613      }
614      CYCLES(cpustate,1); // TODO: correct cycle count
503615   }
504616}
505617
r26347r26348
508620   UINT16 src;
509621   UINT8 modrm = FETCH(cpustate);
510622
511   if (cpustate->SF == 1) {
512      if( modrm >= 0xc0 ) {
623   if( modrm >= 0xc0 )
624   {
625      if (cpustate->SF == 1)
626      {
513627         src = LOAD_RM16(modrm);
514628         STORE_REG16(modrm, src);
515         CYCLES(cpustate,1); // TODO: correct cycle count
516      } else {
517         UINT32 ea = GetEA(cpustate,modrm,0);
629      }
630      CYCLES(cpustate,1); // TODO: correct cycle count
631   }
632   else
633   {
634      UINT32 ea = GetEA(cpustate,modrm,0);
635      if (cpustate->SF == 1)
636      {
518637         src = READ16(cpustate,ea);
519638         STORE_REG16(modrm, src);
520         CYCLES(cpustate,1); // TODO: correct cycle count
521639      }
640      CYCLES(cpustate,1); // TODO: correct cycle count
522641   }
523642}
524643
r26347r26348
527646   UINT32 src;
528647   UINT8 modrm = FETCH(cpustate);
529648
530   if (cpustate->SF == 1) {
531      if( modrm >= 0xc0 ) {
649   if( modrm >= 0xc0 )
650   {
651      if (cpustate->SF == 1)
652      {
532653         src = LOAD_RM32(modrm);
533654         STORE_REG32(modrm, src);
534         CYCLES(cpustate,1); // TODO: correct cycle count
535      } else {
536         UINT32 ea = GetEA(cpustate,modrm,0);
655      }
656      CYCLES(cpustate,1); // TODO: correct cycle count
657   }
658   else
659   {
660      UINT32 ea = GetEA(cpustate,modrm,0);
661      if (cpustate->SF == 1)
662      {
537663         src = READ32(cpustate,ea);
538664         STORE_REG32(modrm, src);
539         CYCLES(cpustate,1); // TODO: correct cycle count
540665      }
666      CYCLES(cpustate,1); // TODO: correct cycle count
541667   }
542668}
543669
r26347r26348
546672   UINT16 src;
547673   UINT8 modrm = FETCH(cpustate);
548674
549   if (cpustate->SF == 0) {
550      if( modrm >= 0xc0 ) {
675   if( modrm >= 0xc0 )
676   {
677      if (cpustate->SF == 0)
678      {
551679         src = LOAD_RM16(modrm);
552680         STORE_REG16(modrm, src);
553         CYCLES(cpustate,1); // TODO: correct cycle count
554      } else {
555         UINT32 ea = GetEA(cpustate,modrm,0);
681      }
682      CYCLES(cpustate,1); // TODO: correct cycle count
683   }
684   else
685   {
686      UINT32 ea = GetEA(cpustate,modrm,0);
687      if (cpustate->SF == 0)
688      {
556689         src = READ16(cpustate,ea);
557690         STORE_REG16(modrm, src);
558         CYCLES(cpustate,1); // TODO: correct cycle count
559691      }
692      CYCLES(cpustate,1); // TODO: correct cycle count
560693   }
561694}
562695
r26347r26348
565698   UINT32 src;
566699   UINT8 modrm = FETCH(cpustate);
567700
568   if (cpustate->SF == 0) {
569      if( modrm >= 0xc0 ) {
701   if( modrm >= 0xc0 )
702   {
703      if (cpustate->SF == 0)
704      {
570705         src = LOAD_RM32(modrm);
571706         STORE_REG32(modrm, src);
572         CYCLES(cpustate,1); // TODO: correct cycle count
573      } else {
574         UINT32 ea = GetEA(cpustate,modrm,0);
707      }
708      CYCLES(cpustate,1); // TODO: correct cycle count
709   }
710   else
711   {
712      UINT32 ea = GetEA(cpustate,modrm,0);
713      if (cpustate->SF == 0)
714      {
575715         src = READ32(cpustate,ea);
576716         STORE_REG32(modrm, src);
577         CYCLES(cpustate,1); // TODO: correct cycle count
578717      }
718      CYCLES(cpustate,1); // TODO: correct cycle count
579719   }
580720}
581721
r26347r26348
584724   UINT16 src;
585725   UINT8 modrm = FETCH(cpustate);
586726
587   if (cpustate->PF == 1) {
588      if( modrm >= 0xc0 ) {
727   if( modrm >= 0xc0 )
728   {
729      if (cpustate->PF == 1)
730      {
589731         src = LOAD_RM16(modrm);
590732         STORE_REG16(modrm, src);
591         CYCLES(cpustate,1); // TODO: correct cycle count
592      } else {
593         UINT32 ea = GetEA(cpustate,modrm,0);
733      }
734      CYCLES(cpustate,1); // TODO: correct cycle count
735   }
736   else
737   {
738      UINT32 ea = GetEA(cpustate,modrm,0);
739      if (cpustate->PF == 1)
740      {
594741         src = READ16(cpustate,ea);
595742         STORE_REG16(modrm, src);
596         CYCLES(cpustate,1); // TODO: correct cycle count
597743      }
744      CYCLES(cpustate,1); // TODO: correct cycle count
598745   }
599746}
600747
r26347r26348
603750   UINT32 src;
604751   UINT8 modrm = FETCH(cpustate);
605752
606   if (cpustate->PF == 1) {
607      if( modrm >= 0xc0 ) {
753   if( modrm >= 0xc0 )
754   {
755      if (cpustate->PF == 1)
756      {
608757         src = LOAD_RM32(modrm);
609758         STORE_REG32(modrm, src);
610         CYCLES(cpustate,1); // TODO: correct cycle count
611      } else {
612         UINT32 ea = GetEA(cpustate,modrm,0);
759      }
760      CYCLES(cpustate,1); // TODO: correct cycle count
761   }
762   else
763   {
764      UINT32 ea = GetEA(cpustate,modrm,0);
765      if (cpustate->PF == 1)
766      {
613767         src = READ32(cpustate,ea);
614768         STORE_REG32(modrm, src);
615         CYCLES(cpustate,1); // TODO: correct cycle count
616769      }
770      CYCLES(cpustate,1); // TODO: correct cycle count
617771   }
618772}
619773
r26347r26348
622776   UINT16 src;
623777   UINT8 modrm = FETCH(cpustate);
624778
625   if (cpustate->PF == 0) {
626      if( modrm >= 0xc0 ) {
779   if( modrm >= 0xc0 )
780   {
781      if (cpustate->PF == 0)
782      {
627783         src = LOAD_RM16(modrm);
628784         STORE_REG16(modrm, src);
629         CYCLES(cpustate,1); // TODO: correct cycle count
630      } else {
631         UINT32 ea = GetEA(cpustate,modrm,0);
785      }
786      CYCLES(cpustate,1); // TODO: correct cycle count
787   }
788   else
789   {
790      UINT32 ea = GetEA(cpustate,modrm,0);
791      if (cpustate->PF == 0)
792      {
632793         src = READ16(cpustate,ea);
633794         STORE_REG16(modrm, src);
634         CYCLES(cpustate,1); // TODO: correct cycle count
635795      }
796      CYCLES(cpustate,1); // TODO: correct cycle count
636797   }
637798}
638799
r26347r26348
641802   UINT32 src;
642803   UINT8 modrm = FETCH(cpustate);
643804
644   if (cpustate->PF == 0) {
645      if( modrm >= 0xc0 ) {
805   if( modrm >= 0xc0 )
806   {
807      if (cpustate->PF == 0)
808      {
646809         src = LOAD_RM32(modrm);
647810         STORE_REG32(modrm, src);
648         CYCLES(cpustate,1); // TODO: correct cycle count
649      } else {
650         UINT32 ea = GetEA(cpustate,modrm,0);
811      }
812      CYCLES(cpustate,1); // TODO: correct cycle count
813   }
814   else
815   {
816      UINT32 ea = GetEA(cpustate,modrm,0);
817      if (cpustate->PF == 0)
818      {
651819         src = READ32(cpustate,ea);
652820         STORE_REG32(modrm, src);
653         CYCLES(cpustate,1); // TODO: correct cycle count
654821      }
822      CYCLES(cpustate,1); // TODO: correct cycle count
655823   }
656824}
657825
r26347r26348
660828   UINT16 src;
661829   UINT8 modrm = FETCH(cpustate);
662830
663   if (cpustate->SF != cpustate->OF) {
664      if( modrm >= 0xc0 ) {
831   if( modrm >= 0xc0 )
832   {
833      if (cpustate->SF != cpustate->OF)
834      {
665835         src = LOAD_RM16(modrm);
666836         STORE_REG16(modrm, src);
667         CYCLES(cpustate,1); // TODO: correct cycle count
668      } else {
669         UINT32 ea = GetEA(cpustate,modrm,0);
837      }
838      CYCLES(cpustate,1); // TODO: correct cycle count
839   }
840   else
841   {
842      UINT32 ea = GetEA(cpustate,modrm,0);
843      if (cpustate->SF != cpustate->OF)
844      {
670845         src = READ16(cpustate,ea);
671846         STORE_REG16(modrm, src);
672         CYCLES(cpustate,1); // TODO: correct cycle count
673847      }
848      CYCLES(cpustate,1); // TODO: correct cycle count
674849   }
675850}
676851
r26347r26348
679854   UINT32 src;
680855   UINT8 modrm = FETCH(cpustate);
681856
682   if (cpustate->SF != cpustate->OF) {
683      if( modrm >= 0xc0 ) {
857   if( modrm >= 0xc0 )
858   {
859      if (cpustate->SF != cpustate->OF)
860      {
684861         src = LOAD_RM32(modrm);
685862         STORE_REG32(modrm, src);
686         CYCLES(cpustate,1); // TODO: correct cycle count
687      } else {
688         UINT32 ea = GetEA(cpustate,modrm,0);
863      }
864      CYCLES(cpustate,1); // TODO: correct cycle count
865   }
866   else
867   {
868      UINT32 ea = GetEA(cpustate,modrm,0);
869      if (cpustate->SF != cpustate->OF)
870      {
689871         src = READ32(cpustate,ea);
690872         STORE_REG32(modrm, src);
691         CYCLES(cpustate,1); // TODO: correct cycle count
692873      }
874      CYCLES(cpustate,1); // TODO: correct cycle count
693875   }
694876}
695877
r26347r26348
698880   UINT16 src;
699881   UINT8 modrm = FETCH(cpustate);
700882
701   if (cpustate->SF == cpustate->OF) {
702      if( modrm >= 0xc0 ) {
883   if( modrm >= 0xc0 )
884   {
885      if (cpustate->SF == cpustate->OF)
886      {
703887         src = LOAD_RM16(modrm);
704888         STORE_REG16(modrm, src);
705         CYCLES(cpustate,1); // TODO: correct cycle count
706      } else {
707         UINT32 ea = GetEA(cpustate,modrm,0);
889      }
890      CYCLES(cpustate,1); // TODO: correct cycle count
891   }
892   else
893   {
894      UINT32 ea = GetEA(cpustate,modrm,0);
895      if (cpustate->SF == cpustate->OF)
896      {
708897         src = READ16(cpustate,ea);
709898         STORE_REG16(modrm, src);
710         CYCLES(cpustate,1); // TODO: correct cycle count
711899      }
900      CYCLES(cpustate,1); // TODO: correct cycle count
712901   }
713902}
714903
r26347r26348
717906   UINT32 src;
718907   UINT8 modrm = FETCH(cpustate);
719908
720   if (cpustate->SF == cpustate->OF) {
721      if( modrm >= 0xc0 ) {
909   if( modrm >= 0xc0 )
910   {
911      if (cpustate->SF == cpustate->OF)
912      {
722913         src = LOAD_RM32(modrm);
723914         STORE_REG32(modrm, src);
724         CYCLES(cpustate,1); // TODO: correct cycle count
725      } else {
726         UINT32 ea = GetEA(cpustate,modrm,0);
915      }
916      CYCLES(cpustate,1); // TODO: correct cycle count
917   }
918   else
919   {
920      UINT32 ea = GetEA(cpustate,modrm,0);
921      if (cpustate->SF == cpustate->OF)
922      {
727923         src = READ32(cpustate,ea);
728924         STORE_REG32(modrm, src);
729         CYCLES(cpustate,1); // TODO: correct cycle count
730925      }
926      CYCLES(cpustate,1); // TODO: correct cycle count
731927   }
732928}
733929
r26347r26348
736932   UINT16 src;
737933   UINT8 modrm = FETCH(cpustate);
738934
739   if ((cpustate->ZF == 1) || (cpustate->SF != cpustate->OF)) {
740      if( modrm >= 0xc0 ) {
935   if( modrm >= 0xc0 )
936   {
937      if ((cpustate->ZF == 1) || (cpustate->SF != cpustate->OF))
938      {
741939         src = LOAD_RM16(modrm);
742940         STORE_REG16(modrm, src);
743         CYCLES(cpustate,1); // TODO: correct cycle count
744      } else {
745         UINT32 ea = GetEA(cpustate,modrm,0);
941      }
942      CYCLES(cpustate,1); // TODO: correct cycle count
943   }
944   else
945   {
946      UINT32 ea = GetEA(cpustate,modrm,0);
947      if ((cpustate->ZF == 1) || (cpustate->SF != cpustate->OF))
948      {
746949         src = READ16(cpustate,ea);
747950         STORE_REG16(modrm, src);
748         CYCLES(cpustate,1); // TODO: correct cycle count
749951      }
952      CYCLES(cpustate,1); // TODO: correct cycle count
750953   }
751954}
752955
r26347r26348
755958   UINT32 src;
756959   UINT8 modrm = FETCH(cpustate);
757960
758   if ((cpustate->ZF == 1) || (cpustate->SF != cpustate->OF)) {
759      if( modrm >= 0xc0 ) {
961   if( modrm >= 0xc0 )
962   {
963      if ((cpustate->ZF == 1) || (cpustate->SF != cpustate->OF))
964      {
760965         src = LOAD_RM32(modrm);
761966         STORE_REG32(modrm, src);
762         CYCLES(cpustate,1); // TODO: correct cycle count
763      } else {
764         UINT32 ea = GetEA(cpustate,modrm,0);
967      }
968      CYCLES(cpustate,1); // TODO: correct cycle count
969   }
970   else
971   {
972      UINT32 ea = GetEA(cpustate,modrm,0);
973      if ((cpustate->ZF == 1) || (cpustate->SF != cpustate->OF))
974      {
765975         src = READ32(cpustate,ea);
766976         STORE_REG32(modrm, src);
767         CYCLES(cpustate,1); // TODO: correct cycle count
768977      }
978      CYCLES(cpustate,1); // TODO: correct cycle count
769979   }
770980}
771981
r26347r26348
774984   UINT16 src;
775985   UINT8 modrm = FETCH(cpustate);
776986
777   if ((cpustate->ZF == 0) && (cpustate->SF == cpustate->OF)) {
778      if( modrm >= 0xc0 ) {
987   if( modrm >= 0xc0 )
988   {
989      if ((cpustate->ZF == 0) && (cpustate->SF == cpustate->OF))
990      {
779991         src = LOAD_RM16(modrm);
780992         STORE_REG16(modrm, src);
781         CYCLES(cpustate,1); // TODO: correct cycle count
782      } else {
783         UINT32 ea = GetEA(cpustate,modrm,0);
993      }
994      CYCLES(cpustate,1); // TODO: correct cycle count
995   }
996   else
997   {
998      UINT32 ea = GetEA(cpustate,modrm,0);
999      if ((cpustate->ZF == 0) && (cpustate->SF == cpustate->OF))
1000      {
7841001         src = READ16(cpustate,ea);
7851002         STORE_REG16(modrm, src);
786         CYCLES(cpustate,1); // TODO: correct cycle count
7871003      }
1004      CYCLES(cpustate,1); // TODO: correct cycle count
7881005   }
7891006}
7901007
r26347r26348
7931010   UINT32 src;
7941011   UINT8 modrm = FETCH(cpustate);
7951012
796   if ((cpustate->ZF == 0) && (cpustate->SF == cpustate->OF)) {
797      if( modrm >= 0xc0 ) {
1013   if( modrm >= 0xc0 )
1014   {
1015      if ((cpustate->ZF == 0) && (cpustate->SF == cpustate->OF))
1016      {
7981017         src = LOAD_RM32(modrm);
7991018         STORE_REG32(modrm, src);
800         CYCLES(cpustate,1); // TODO: correct cycle count
801      } else {
802         UINT32 ea = GetEA(cpustate,modrm,0);
1019      }
1020      CYCLES(cpustate,1); // TODO: correct cycle count
1021   }
1022   else
1023   {
1024      UINT32 ea = GetEA(cpustate,modrm,0);
1025      if ((cpustate->ZF == 0) && (cpustate->SF == cpustate->OF))
1026      {
8031027         src = READ32(cpustate,ea);
8041028         STORE_REG32(modrm, src);
805         CYCLES(cpustate,1); // TODO: correct cycle count
8061029      }
1030      CYCLES(cpustate,1); // TODO: correct cycle count
8071031   }
8081032}
8091033
trunk/src/emu/cpu/i386/i386.c
r26347r26348
290290   if( mod_rm >= 0xc0 )
291291      fatalerror("i386: Called modrm_to_EA with modrm value %02X!\n",mod_rm);
292292
293
293294   if( cpustate->address_size ) {
294295      switch( rm )
295296      {
r26347r26348
42014202   cpustate->cpu_version = REG32(EDX);
42024203
42034204   // [ 0:0] FPU on chip
4204   cpustate->feature_flags = 0x00000001;       // TODO: enable relevant flags here
4205   // [ 2:2] I/O breakpoints
4206   // [ 4:4] Time Stamp Counter
4207   // [ 5:5] Pentium CPU style model specific registers
4208   // [ 7:7] Machine Check Exception
4209   // [ 8:8] CMPXCHG8B instruction
4210   // [15:15] CMOV and FCMOV
4211   // No MMX
4212   cpustate->feature_flags = 0x000081bf;
42054213
42064214   CHANGE_PC(cpustate,cpustate->eip);
42074215}
r26347r26348
43074315   cpustate->cpu_version = REG32(EDX);
43084316
43094317   // [ 0:0] FPU on chip
4310   cpustate->feature_flags = 0x00000001;       // TODO: enable relevant flags here
4318   // [ 2:2] I/O breakpoints
4319   // [ 4:4] Time Stamp Counter
4320   // [ 5:5] Pentium CPU style model specific registers
4321   // [ 7:7] Machine Check Exception
4322   // [ 8:8] CMPXCHG8B instruction
4323   // [23:23] MMX instructions
4324   cpustate->feature_flags = 0x008001bf;
43114325
43124326   CHANGE_PC(cpustate,cpustate->eip);
43134327}
r26347r26348
44134427   cpustate->cpu_version = REG32(EDX);
44144428
44154429   // [ 0:0] FPU on chip
4416   cpustate->feature_flags = 0x00000001;       // TODO: enable relevant flags here
4430   cpustate->feature_flags = 0x008081bf;       // TODO: enable relevant flags here
44174431
44184432   CHANGE_PC(cpustate,cpustate->eip);
44194433}

Previous 199869 Revisions Next


© 1997-2024 The MAME Team