dos2unix fpu_compare

update changes file
This commit is contained in:
Stanislav Shwartsman 2003-11-01 18:45:16 +00:00
parent 66549cc16b
commit e8961bb65d
2 changed files with 185 additions and 184 deletions

View File

@ -30,6 +30,7 @@ Changes in 2.1 (October 2, 2003):
- floatx80_add, floatx80_sub, - floatx80_add, floatx80_sub,
- floatx80_mul, floatx80_div - floatx80_mul, floatx80_div
- 64-bit addressing support for x86-64 mode (Christophe Bothamy) - 64-bit addressing support for x86-64 mode (Christophe Bothamy)
- implemented FCMOVcc instructions
More Details: More Details:

View File

@ -1,184 +1,184 @@
/*---------------------------------------------------------------------------+ /*---------------------------------------------------------------------------+
| fpu_compare.c | | fpu_compare.c |
| $Id: fpu_compare.c,v 1.1 2003-11-01 18:36:19 sshwarts Exp $ | $Id: fpu_compare.c,v 1.2 2003-11-01 18:45:16 sshwarts Exp $
| | | |
| Code to implement FMOVcc and other P6 FPU instructions. | | Code to implement FMOVcc and other P6 FPU instructions. |
| | | |
+---------------------------------------------------------------------------*/ +---------------------------------------------------------------------------*/
#include "fpu_system.h" #include "fpu_system.h"
#include "exception.h" #include "exception.h"
#include "fpu_emu.h" #include "fpu_emu.h"
#include "status_w.h" #include "status_w.h"
/* EFLAGS: */ /* EFLAGS: */
/* 31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16 /* 31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16
* ==|==|=====|==|==|==|==|==|==|==|==|==|==|==|== * ==|==|=====|==|==|==|==|==|==|==|==|==|==|==|==
* 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|ID|VP|VF|AC|VM|RF * 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|ID|VP|VF|AC|VM|RF
* *
* 15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0 * 15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0
* ==|==|=====|==|==|==|==|==|==|==|==|==|==|==|== * ==|==|=====|==|==|==|==|==|==|==|==|==|==|==|==
* 0|NT| IOPL|OF|DF|IF|TF|SF|ZF| 0|AF| 0|PF| 1|CF * 0|NT| IOPL|OF|DF|IF|TF|SF|ZF| 0|AF| 0|PF| 1|CF
*/ */
#define EFLAGS_CF 0x01 #define EFLAGS_CF 0x01
#define EFLAGS_PF 0x04 #define EFLAGS_PF 0x04
#define EFLAGS_AF 0x10 #define EFLAGS_AF 0x10
#define EFLAGS_ZF 0x40 #define EFLAGS_ZF 0x40
void FPU_fcmovb() void FPU_fcmovb()
{ {
int i = FPU_rm; int i = FPU_rm;
FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i); FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i);
u_char st0_tag = FPU_gettagi(0); u_char st0_tag = FPU_gettagi(0);
u_char sti_tag = FPU_gettagi(i); u_char sti_tag = FPU_gettagi(i);
u32 eflags = fpu_get_eflags(); u32 eflags = fpu_get_eflags();
if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) { if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) {
clear_C1(); clear_C1();
FPU_stack_underflow(); FPU_stack_underflow();
} }
if (eflags & EFLAGS_CF) if (eflags & EFLAGS_CF)
FPU_copy_to_reg0(sti_ptr, sti_tag); FPU_copy_to_reg0(sti_ptr, sti_tag);
} }
void FPU_fcmove() void FPU_fcmove()
{ {
int i = FPU_rm; int i = FPU_rm;
FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i); FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i);
u_char st0_tag = FPU_gettagi(0); u_char st0_tag = FPU_gettagi(0);
u_char sti_tag = FPU_gettagi(i); u_char sti_tag = FPU_gettagi(i);
u32 eflags = fpu_get_eflags(); u32 eflags = fpu_get_eflags();
if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) { if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) {
clear_C1(); clear_C1();
FPU_stack_underflow(); FPU_stack_underflow();
} }
if (eflags & EFLAGS_ZF) if (eflags & EFLAGS_ZF)
FPU_copy_to_reg0(sti_ptr, sti_tag); FPU_copy_to_reg0(sti_ptr, sti_tag);
} }
void FPU_fcmovbe() void FPU_fcmovbe()
{ {
int i = FPU_rm; int i = FPU_rm;
FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i); FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i);
u_char st0_tag = FPU_gettagi(0); u_char st0_tag = FPU_gettagi(0);
u_char sti_tag = FPU_gettagi(i); u_char sti_tag = FPU_gettagi(i);
u32 eflags = fpu_get_eflags(); u32 eflags = fpu_get_eflags();
if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) { if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) {
clear_C1(); clear_C1();
FPU_stack_underflow(); FPU_stack_underflow();
} }
if (eflags & (EFLAGS_ZF | EFLAGS_CF)) if (eflags & (EFLAGS_ZF | EFLAGS_CF))
FPU_copy_to_reg0(sti_ptr, sti_tag); FPU_copy_to_reg0(sti_ptr, sti_tag);
} }
void FPU_fcmovu() void FPU_fcmovu()
{ {
int i = FPU_rm; int i = FPU_rm;
FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i); FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i);
u_char st0_tag = FPU_gettagi(0); u_char st0_tag = FPU_gettagi(0);
u_char sti_tag = FPU_gettagi(i); u_char sti_tag = FPU_gettagi(i);
u32 eflags = fpu_get_eflags(); u32 eflags = fpu_get_eflags();
if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) { if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) {
clear_C1(); clear_C1();
FPU_stack_underflow(); FPU_stack_underflow();
} }
if (eflags & EFLAGS_PF) if (eflags & EFLAGS_PF)
FPU_copy_to_reg0(sti_ptr, sti_tag); FPU_copy_to_reg0(sti_ptr, sti_tag);
} }
void FPU_fcmovnb() void FPU_fcmovnb()
{ {
int i = FPU_rm; int i = FPU_rm;
FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i); FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i);
u_char st0_tag = FPU_gettagi(0); u_char st0_tag = FPU_gettagi(0);
u_char sti_tag = FPU_gettagi(i); u_char sti_tag = FPU_gettagi(i);
u32 eflags = fpu_get_eflags(); u32 eflags = fpu_get_eflags();
if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) { if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) {
clear_C1(); clear_C1();
FPU_stack_underflow(); FPU_stack_underflow();
} }
if (!(eflags & EFLAGS_CF)) if (!(eflags & EFLAGS_CF))
FPU_copy_to_reg0(sti_ptr, sti_tag); FPU_copy_to_reg0(sti_ptr, sti_tag);
} }
void FPU_fcmovne() void FPU_fcmovne()
{ {
int i = FPU_rm; int i = FPU_rm;
FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i); FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i);
u_char st0_tag = FPU_gettagi(0); u_char st0_tag = FPU_gettagi(0);
u_char sti_tag = FPU_gettagi(i); u_char sti_tag = FPU_gettagi(i);
u32 eflags = fpu_get_eflags(); u32 eflags = fpu_get_eflags();
if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) { if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) {
clear_C1(); clear_C1();
FPU_stack_underflow(); FPU_stack_underflow();
} }
if (!(eflags & EFLAGS_ZF)) if (!(eflags & EFLAGS_ZF))
FPU_copy_to_reg0(sti_ptr, sti_tag); FPU_copy_to_reg0(sti_ptr, sti_tag);
} }
void FPU_fcmovnbe() void FPU_fcmovnbe()
{ {
int i = FPU_rm; int i = FPU_rm;
FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i); FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i);
u_char st0_tag = FPU_gettagi(0); u_char st0_tag = FPU_gettagi(0);
u_char sti_tag = FPU_gettagi(i); u_char sti_tag = FPU_gettagi(i);
u32 eflags = fpu_get_eflags(); u32 eflags = fpu_get_eflags();
if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) { if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) {
clear_C1(); clear_C1();
FPU_stack_underflow(); FPU_stack_underflow();
} }
if (!(eflags & EFLAGS_CF) && !(eflags & EFLAGS_ZF)) if (!(eflags & EFLAGS_CF) && !(eflags & EFLAGS_ZF))
FPU_copy_to_reg0(sti_ptr, sti_tag); FPU_copy_to_reg0(sti_ptr, sti_tag);
} }
void FPU_fcmovnu() void FPU_fcmovnu()
{ {
int i = FPU_rm; int i = FPU_rm;
FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i); FPU_REG *st0_ptr = &st(0), *sti_ptr = &st(i);
u_char st0_tag = FPU_gettagi(0); u_char st0_tag = FPU_gettagi(0);
u_char sti_tag = FPU_gettagi(i); u_char sti_tag = FPU_gettagi(i);
u32 eflags = fpu_get_eflags(); u32 eflags = fpu_get_eflags();
if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) { if (st0_tag == TAG_Empty || sti_tag == TAG_Empty) {
clear_C1(); clear_C1();
FPU_stack_underflow(); FPU_stack_underflow();
} }
if (!(eflags & EFLAGS_PF)) if (!(eflags & EFLAGS_PF))
FPU_copy_to_reg0(sti_ptr, sti_tag); FPU_copy_to_reg0(sti_ptr, sti_tag);
} }
void FPU_fucomip() void FPU_fucomip()
{ {
printk("WARNING: FUCOMIP instruction still not implemented"); printk("WARNING: FUCOMIP instruction still not implemented");
} }
void FPU_fcomip() void FPU_fcomip()
{ {
printk("WARNING: FCOMIP instruction still not implemented"); printk("WARNING: FCOMIP instruction still not implemented");
} }
void FPU_fucomi() void FPU_fucomi()
{ {
printk("WARNING: FUCOMI instruction still not implemented"); printk("WARNING: FUCOMI instruction still not implemented");
} }
void FPU_fcomi() void FPU_fcomi()
{ {
printk("WARNING: FCOMI instruction still not implemented"); printk("WARNING: FCOMI instruction still not implemented");
} }