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