Linux Audio

Check our new training course

Loading...
v6.2
  1// SPDX-License-Identifier: GPL-2.0
  2/*---------------------------------------------------------------------------+
  3 |  fpu_arith.c                                                              |
  4 |                                                                           |
  5 | Code to implement the FPU register/register arithmetic instructions       |
  6 |                                                                           |
  7 | Copyright (C) 1992,1993,1997                                              |
  8 |                  W. Metzenthen, 22 Parker St, Ormond, Vic 3163, Australia |
  9 |                  E-mail   billm@suburbia.net                              |
 10 |                                                                           |
 11 |                                                                           |
 12 +---------------------------------------------------------------------------*/
 13
 14#include "fpu_system.h"
 15#include "fpu_emu.h"
 16#include "control_w.h"
 17#include "status_w.h"
 18
 19void fadd__(void)
 20{
 21	/* fadd st,st(i) */
 22	int i = FPU_rm;
 23	clear_C1();
 24	FPU_add(&st(i), FPU_gettagi(i), 0, control_word);
 25}
 26
 27void fmul__(void)
 28{
 29	/* fmul st,st(i) */
 30	int i = FPU_rm;
 31	clear_C1();
 32	FPU_mul(&st(i), FPU_gettagi(i), 0, control_word);
 33}
 34
 35void fsub__(void)
 36{
 37	/* fsub st,st(i) */
 38	clear_C1();
 39	FPU_sub(0, FPU_rm, control_word);
 40}
 41
 42void fsubr_(void)
 43{
 44	/* fsubr st,st(i) */
 45	clear_C1();
 46	FPU_sub(REV, FPU_rm, control_word);
 47}
 48
 49void fdiv__(void)
 50{
 51	/* fdiv st,st(i) */
 52	clear_C1();
 53	FPU_div(0, FPU_rm, control_word);
 54}
 55
 56void fdivr_(void)
 57{
 58	/* fdivr st,st(i) */
 59	clear_C1();
 60	FPU_div(REV, FPU_rm, control_word);
 61}
 62
 63void fadd_i(void)
 64{
 65	/* fadd st(i),st */
 66	int i = FPU_rm;
 67	clear_C1();
 68	FPU_add(&st(i), FPU_gettagi(i), i, control_word);
 69}
 70
 71void fmul_i(void)
 72{
 73	/* fmul st(i),st */
 74	clear_C1();
 75	FPU_mul(&st(0), FPU_gettag0(), FPU_rm, control_word);
 76}
 77
 78void fsubri(void)
 79{
 80	/* fsubr st(i),st */
 81	clear_C1();
 82	FPU_sub(DEST_RM, FPU_rm, control_word);
 83}
 84
 85void fsub_i(void)
 86{
 87	/* fsub st(i),st */
 88	clear_C1();
 89	FPU_sub(REV | DEST_RM, FPU_rm, control_word);
 90}
 91
 92void fdivri(void)
 93{
 94	/* fdivr st(i),st */
 95	clear_C1();
 96	FPU_div(DEST_RM, FPU_rm, control_word);
 97}
 98
 99void fdiv_i(void)
100{
101	/* fdiv st(i),st */
102	clear_C1();
103	FPU_div(REV | DEST_RM, FPU_rm, control_word);
104}
105
106void faddp_(void)
107{
108	/* faddp st(i),st */
109	int i = FPU_rm;
110	clear_C1();
111	if (FPU_add(&st(i), FPU_gettagi(i), i, control_word) >= 0)
112		FPU_pop();
113}
114
115void fmulp_(void)
116{
117	/* fmulp st(i),st */
118	clear_C1();
119	if (FPU_mul(&st(0), FPU_gettag0(), FPU_rm, control_word) >= 0)
120		FPU_pop();
121}
122
123void fsubrp(void)
124{
125	/* fsubrp st(i),st */
126	clear_C1();
127	if (FPU_sub(DEST_RM, FPU_rm, control_word) >= 0)
128		FPU_pop();
129}
130
131void fsubp_(void)
132{
133	/* fsubp st(i),st */
134	clear_C1();
135	if (FPU_sub(REV | DEST_RM, FPU_rm, control_word) >= 0)
136		FPU_pop();
137}
138
139void fdivrp(void)
140{
141	/* fdivrp st(i),st */
142	clear_C1();
143	if (FPU_div(DEST_RM, FPU_rm, control_word) >= 0)
144		FPU_pop();
145}
146
147void fdivp_(void)
148{
149	/* fdivp st(i),st */
150	clear_C1();
151	if (FPU_div(REV | DEST_RM, FPU_rm, control_word) >= 0)
152		FPU_pop();
153}
v5.4
  1// SPDX-License-Identifier: GPL-2.0
  2/*---------------------------------------------------------------------------+
  3 |  fpu_arith.c                                                              |
  4 |                                                                           |
  5 | Code to implement the FPU register/register arithmetic instructions       |
  6 |                                                                           |
  7 | Copyright (C) 1992,1993,1997                                              |
  8 |                  W. Metzenthen, 22 Parker St, Ormond, Vic 3163, Australia |
  9 |                  E-mail   billm@suburbia.net                              |
 10 |                                                                           |
 11 |                                                                           |
 12 +---------------------------------------------------------------------------*/
 13
 14#include "fpu_system.h"
 15#include "fpu_emu.h"
 16#include "control_w.h"
 17#include "status_w.h"
 18
 19void fadd__(void)
 20{
 21	/* fadd st,st(i) */
 22	int i = FPU_rm;
 23	clear_C1();
 24	FPU_add(&st(i), FPU_gettagi(i), 0, control_word);
 25}
 26
 27void fmul__(void)
 28{
 29	/* fmul st,st(i) */
 30	int i = FPU_rm;
 31	clear_C1();
 32	FPU_mul(&st(i), FPU_gettagi(i), 0, control_word);
 33}
 34
 35void fsub__(void)
 36{
 37	/* fsub st,st(i) */
 38	clear_C1();
 39	FPU_sub(0, FPU_rm, control_word);
 40}
 41
 42void fsubr_(void)
 43{
 44	/* fsubr st,st(i) */
 45	clear_C1();
 46	FPU_sub(REV, FPU_rm, control_word);
 47}
 48
 49void fdiv__(void)
 50{
 51	/* fdiv st,st(i) */
 52	clear_C1();
 53	FPU_div(0, FPU_rm, control_word);
 54}
 55
 56void fdivr_(void)
 57{
 58	/* fdivr st,st(i) */
 59	clear_C1();
 60	FPU_div(REV, FPU_rm, control_word);
 61}
 62
 63void fadd_i(void)
 64{
 65	/* fadd st(i),st */
 66	int i = FPU_rm;
 67	clear_C1();
 68	FPU_add(&st(i), FPU_gettagi(i), i, control_word);
 69}
 70
 71void fmul_i(void)
 72{
 73	/* fmul st(i),st */
 74	clear_C1();
 75	FPU_mul(&st(0), FPU_gettag0(), FPU_rm, control_word);
 76}
 77
 78void fsubri(void)
 79{
 80	/* fsubr st(i),st */
 81	clear_C1();
 82	FPU_sub(DEST_RM, FPU_rm, control_word);
 83}
 84
 85void fsub_i(void)
 86{
 87	/* fsub st(i),st */
 88	clear_C1();
 89	FPU_sub(REV | DEST_RM, FPU_rm, control_word);
 90}
 91
 92void fdivri(void)
 93{
 94	/* fdivr st(i),st */
 95	clear_C1();
 96	FPU_div(DEST_RM, FPU_rm, control_word);
 97}
 98
 99void fdiv_i(void)
100{
101	/* fdiv st(i),st */
102	clear_C1();
103	FPU_div(REV | DEST_RM, FPU_rm, control_word);
104}
105
106void faddp_(void)
107{
108	/* faddp st(i),st */
109	int i = FPU_rm;
110	clear_C1();
111	if (FPU_add(&st(i), FPU_gettagi(i), i, control_word) >= 0)
112		FPU_pop();
113}
114
115void fmulp_(void)
116{
117	/* fmulp st(i),st */
118	clear_C1();
119	if (FPU_mul(&st(0), FPU_gettag0(), FPU_rm, control_word) >= 0)
120		FPU_pop();
121}
122
123void fsubrp(void)
124{
125	/* fsubrp st(i),st */
126	clear_C1();
127	if (FPU_sub(DEST_RM, FPU_rm, control_word) >= 0)
128		FPU_pop();
129}
130
131void fsubp_(void)
132{
133	/* fsubp st(i),st */
134	clear_C1();
135	if (FPU_sub(REV | DEST_RM, FPU_rm, control_word) >= 0)
136		FPU_pop();
137}
138
139void fdivrp(void)
140{
141	/* fdivrp st(i),st */
142	clear_C1();
143	if (FPU_div(DEST_RM, FPU_rm, control_word) >= 0)
144		FPU_pop();
145}
146
147void fdivp_(void)
148{
149	/* fdivp st(i),st */
150	clear_C1();
151	if (FPU_div(REV | DEST_RM, FPU_rm, control_word) >= 0)
152		FPU_pop();
153}