32 lines
1.0 KiB
C
32 lines
1.0 KiB
C
|
extern int target_flags;
|
||
|
|
||
|
enum reg_class
|
||
|
{
|
||
|
NO_REGS,
|
||
|
AREG, DREG, CREG, BREG,
|
||
|
Q_REGS,
|
||
|
SIREG, DIREG,
|
||
|
INDEX_REGS,
|
||
|
GENERAL_REGS,
|
||
|
FP_TOP_REG, FP_SECOND_REG,
|
||
|
FLOAT_REGS,
|
||
|
ALL_REGS, LIM_REG_CLASSES
|
||
|
};
|
||
|
extern enum reg_class regclass_map[17 ];
|
||
|
|
||
|
|
||
|
extern struct rtx_def *i386_compare_op0, *i386_compare_op1;
|
||
|
extern struct rtx_def *(*i386_compare_gen)(), *(*i386_compare_gen_eq)();
|
||
|
extern char *hi_reg_name[];
|
||
|
extern char *qi_reg_name[];
|
||
|
extern char *qi_high_reg_name[];
|
||
|
|
||
|
union flt_or_value { float i; float f; };
|
||
|
union flt_or_int { int i; float f; };
|
||
|
long int
|
||
|
__fixdfsi (a)
|
||
|
double a;
|
||
|
{
|
||
|
{ auto unsigned short ostatus; auto unsigned short nstatus; auto int ret; auto double tmp; &ostatus; &nstatus; &ret; &tmp; asm volatile ("fnstcw %0" : "=m" (ostatus)); nstatus = ostatus | 0x0c00; asm volatile ("fldcw %0" : : "m" (nstatus)); tmp = a ; asm volatile ("fldl %0" : : "m" (tmp)); asm volatile ("fistpl %0" : "=m" (ret)); asm volatile ("fldcw %0" : : "m" (ostatus)); return ret; } ;
|
||
|
}
|