/[qemu]/qemu/target-i386/op.c
ViewVC logotype

Diff of /qemu/target-i386/op.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.35 by bellard, Sun Mar 13 16:59:53 2005 UTC revision 1.36 by bellard, Sun Mar 20 10:39:24 2005 UTC
# Line 1952  void OPPROTO op_fxchg_ST0_STN(void) Line 1952  void OPPROTO op_fxchg_ST0_STN(void)
1952    
1953  /* FPU operations */  /* FPU operations */
1954    
 /* XXX: handle nans */  
1955  void OPPROTO op_fcom_ST0_FT0(void)  void OPPROTO op_fcom_ST0_FT0(void)
1956  {  {
1957      env->fpus &= (~0x4500);     /* (C3,C2,C0) <-- 000 */      int cc;
1958      if (ST0 < FT0)      switch(floatx_compare(ST0, FT0, &env->fp_status)) {
1959          env->fpus |= 0x100;     /* (C3,C2,C0) <-- 001 */      case -1:
1960      else if (ST0 == FT0)          cc = 0x0100;
1961          env->fpus |= 0x4000; /* (C3,C2,C0) <-- 100 */          break;
1962        case 0:
1963            cc = 0x4000;
1964            break;
1965        case 1:
1966            cc = 0x0000;
1967            break;
1968        case 2:
1969        default:
1970            cc = 0x4500;
1971            break;
1972        }
1973        env->fpus = (env->fpus & ~0x4500) | cc;
1974      FORCE_RET();      FORCE_RET();
1975  }  }
1976    
 /* XXX: handle nans */  
1977  void OPPROTO op_fucom_ST0_FT0(void)  void OPPROTO op_fucom_ST0_FT0(void)
1978  {  {
1979      env->fpus &= (~0x4500);     /* (C3,C2,C0) <-- 000 */      int cc;
1980      if (ST0 < FT0)      switch(floatx_compare_quiet(ST0, FT0, &env->fp_status)) {
1981          env->fpus |= 0x100;     /* (C3,C2,C0) <-- 001 */      case -1:
1982      else if (ST0 == FT0)          cc = 0x0100;
1983          env->fpus |= 0x4000; /* (C3,C2,C0) <-- 100 */          break;
1984        case 0:
1985            cc = 0x4000;
1986            break;
1987        case 1:
1988            cc = 0x0000;
1989            break;
1990        case 2:
1991        default:
1992            cc = 0x4500;
1993            break;
1994        }
1995        env->fpus = (env->fpus & ~0x4500) | cc;
1996      FORCE_RET();      FORCE_RET();
1997  }  }
1998    
 /* XXX: handle nans */  
1999  void OPPROTO op_fcomi_ST0_FT0(void)  void OPPROTO op_fcomi_ST0_FT0(void)
2000  {  {
2001      int eflags;      int eflags, cc;
2002        switch(floatx_compare(ST0, FT0, &env->fp_status)) {
2003        case -1:
2004            cc = CC_C;
2005            break;
2006        case 0:
2007            cc = CC_Z;
2008            break;
2009        case 1:
2010            cc = 0;
2011            break;
2012        case 2:
2013        default:
2014            cc = CC_Z | CC_P | CC_C;
2015            break;
2016        }
2017      eflags = cc_table[CC_OP].compute_all();      eflags = cc_table[CC_OP].compute_all();
2018      eflags &= ~(CC_Z | CC_P | CC_C);      eflags = (eflags & ~(CC_Z | CC_P | CC_C)) | cc;
     if (ST0 < FT0)  
         eflags |= CC_C;  
     else if (ST0 == FT0)  
         eflags |= CC_Z;  
2019      CC_SRC = eflags;      CC_SRC = eflags;
2020      FORCE_RET();      FORCE_RET();
2021  }  }
2022    
 /* XXX: handle nans */  
2023  void OPPROTO op_fucomi_ST0_FT0(void)  void OPPROTO op_fucomi_ST0_FT0(void)
2024  {  {
2025      int eflags;      int eflags, cc;
2026        switch(floatx_compare_quiet(ST0, FT0, &env->fp_status)) {
2027        case -1:
2028            cc = CC_C;
2029            break;
2030        case 0:
2031            cc = CC_Z;
2032            break;
2033        case 1:
2034            cc = 0;
2035            break;
2036        case 2:
2037        default:
2038            cc = CC_Z | CC_P | CC_C;
2039            break;
2040        }
2041      eflags = cc_table[CC_OP].compute_all();      eflags = cc_table[CC_OP].compute_all();
2042      eflags &= ~(CC_Z | CC_P | CC_C);      eflags = (eflags & ~(CC_Z | CC_P | CC_C)) | cc;
     if (ST0 < FT0)  
         eflags |= CC_C;  
     else if (ST0 == FT0)  
         eflags |= CC_Z;  
2043      CC_SRC = eflags;      CC_SRC = eflags;
2044      FORCE_RET();      FORCE_RET();
2045  }  }

Legend:
Removed from v.1.35  
changed lines
  Added in v.1.36

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26