0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #include "fpu_system.h"
0015 #include "fpu_emu.h"
0016 #include "control_w.h"
0017 #include "status_w.h"
0018
0019 void fadd__(void)
0020 {
0021
0022 int i = FPU_rm;
0023 clear_C1();
0024 FPU_add(&st(i), FPU_gettagi(i), 0, control_word);
0025 }
0026
0027 void fmul__(void)
0028 {
0029
0030 int i = FPU_rm;
0031 clear_C1();
0032 FPU_mul(&st(i), FPU_gettagi(i), 0, control_word);
0033 }
0034
0035 void fsub__(void)
0036 {
0037
0038 clear_C1();
0039 FPU_sub(0, FPU_rm, control_word);
0040 }
0041
0042 void fsubr_(void)
0043 {
0044
0045 clear_C1();
0046 FPU_sub(REV, FPU_rm, control_word);
0047 }
0048
0049 void fdiv__(void)
0050 {
0051
0052 clear_C1();
0053 FPU_div(0, FPU_rm, control_word);
0054 }
0055
0056 void fdivr_(void)
0057 {
0058
0059 clear_C1();
0060 FPU_div(REV, FPU_rm, control_word);
0061 }
0062
0063 void fadd_i(void)
0064 {
0065
0066 int i = FPU_rm;
0067 clear_C1();
0068 FPU_add(&st(i), FPU_gettagi(i), i, control_word);
0069 }
0070
0071 void fmul_i(void)
0072 {
0073
0074 clear_C1();
0075 FPU_mul(&st(0), FPU_gettag0(), FPU_rm, control_word);
0076 }
0077
0078 void fsubri(void)
0079 {
0080
0081 clear_C1();
0082 FPU_sub(DEST_RM, FPU_rm, control_word);
0083 }
0084
0085 void fsub_i(void)
0086 {
0087
0088 clear_C1();
0089 FPU_sub(REV | DEST_RM, FPU_rm, control_word);
0090 }
0091
0092 void fdivri(void)
0093 {
0094
0095 clear_C1();
0096 FPU_div(DEST_RM, FPU_rm, control_word);
0097 }
0098
0099 void fdiv_i(void)
0100 {
0101
0102 clear_C1();
0103 FPU_div(REV | DEST_RM, FPU_rm, control_word);
0104 }
0105
0106 void faddp_(void)
0107 {
0108
0109 int i = FPU_rm;
0110 clear_C1();
0111 if (FPU_add(&st(i), FPU_gettagi(i), i, control_word) >= 0)
0112 FPU_pop();
0113 }
0114
0115 void fmulp_(void)
0116 {
0117
0118 clear_C1();
0119 if (FPU_mul(&st(0), FPU_gettag0(), FPU_rm, control_word) >= 0)
0120 FPU_pop();
0121 }
0122
0123 void fsubrp(void)
0124 {
0125
0126 clear_C1();
0127 if (FPU_sub(DEST_RM, FPU_rm, control_word) >= 0)
0128 FPU_pop();
0129 }
0130
0131 void fsubp_(void)
0132 {
0133
0134 clear_C1();
0135 if (FPU_sub(REV | DEST_RM, FPU_rm, control_word) >= 0)
0136 FPU_pop();
0137 }
0138
0139 void fdivrp(void)
0140 {
0141
0142 clear_C1();
0143 if (FPU_div(DEST_RM, FPU_rm, control_word) >= 0)
0144 FPU_pop();
0145 }
0146
0147 void fdivp_(void)
0148 {
0149
0150 clear_C1();
0151 if (FPU_div(REV | DEST_RM, FPU_rm, control_word) >= 0)
0152 FPU_pop();
0153 }