Skip to content

Commit 0a9ff83

Browse files
committedApr 9, 2023
Get rid of FixedMul2
1 parent f4db3ab commit 0a9ff83

12 files changed

+83
-99
lines changed
 

‎doomdef.h

+5-17
Original file line numberDiff line numberDiff line change
@@ -557,25 +557,13 @@ extern int bodyqueslot;
557557
*/
558558

559559

560-
fixed_t FixedMul (fixed_t a, fixed_t b);
560+
#ifdef MARS
561+
#define FixedMul(a,b) (((int64_t)(a) * (b))>>16)
561562
fixed_t FixedDiv (fixed_t a, fixed_t b);
562563
fixed_t IDiv (fixed_t a, fixed_t b);
563-
564-
#ifdef MARS
565-
#define FixedMul2(c,a,b) do { \
566-
int32_t t; \
567-
__asm volatile ( \
568-
"dmuls.l %2, %3\n\t" \
569-
"sts mach, %1\n\t" \
570-
"sts macl, %0\n\t" \
571-
"xtrct %1, %0\n\t" \
572-
: "=r" (c), "=&r" (t) \
573-
: "r" (a), "r" (b) \
574-
: "mach", "macl"); \
575-
} while (0)
576-
577-
#define FixedMul2(c,a,b) ((c) = FixedMul(a,b))
578-
#define FixedMul3(a,b) FixedMul(a,b)
564+
#else
565+
fixed_t FixedMul (fixed_t a, fixed_t b);
566+
fixed_t FixedDiv (fixed_t a, fixed_t b);
579567
#define IDiv(a,b) ((a) / (b))
580568
#endif
581569

‎marssound.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ static void S_SpatializeAt(fixed_t* origin, mobj_t* listener, int* pvol, int* ps
230230
angle = angle + (0xffffffff - listener->angle);
231231
angle >>= ANGLETOFINESHIFT;
232232

233-
FixedMul2(sep, S_STEREO_SWING, finesine(angle));
233+
sep = FixedMul(S_STEREO_SWING, finesine(angle));
234234
sep >>= FRACBITS;
235235

236236
sep = 128 - sep;

‎p_maputl.c

+2-7
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,8 @@ int P_PointOnLineSide (fixed_t x, fixed_t y, line_t *line)
5656
dx = (x - vertexes[line->v1].x);
5757
dy = (y - vertexes[line->v1].y);
5858

59-
#ifdef MARS
60-
left = ((int64_t)ldy*dx) >> 32;
61-
right = ((int64_t)dy*ldx) >> 32;
62-
#else
6359
left = (ldy>>16) * (dx>>16);
6460
right = (dy>>16) * (ldx>>16);
65-
#endif
6661

6762
if (right < left)
6863
return 0; /* front side */
@@ -97,8 +92,8 @@ int P_PointOnDivlineSide (fixed_t x, fixed_t y, divline_t *line)
9792
}
9893
#endif
9994

100-
FixedMul2(left, line->dy>>8, dx>>8);
101-
FixedMul2(right, dy>>8, line->dx>>8);
95+
left = FixedMul(line->dy>>8, dx>>8);
96+
right = FixedMul(dy>>8, line->dx>>8);
10297

10398
if (right < left)
10499
return 0; /* front side */

‎p_shoot.c

+10-10
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ static boolean PA_ShootLine(shootWork_t *sw, line_t *li, fixed_t interceptfrac)
168168
else
169169
openbottom = back->floorheight;
170170

171-
FixedMul2(dist, sw->attackrange, interceptfrac);
171+
dist = FixedMul(sw->attackrange, interceptfrac);
172172

173173
if(front->floorheight != back->floorheight)
174174
{
@@ -215,7 +215,7 @@ static boolean PA_ShootThing(shootWork_t *sw, mobj_t *th, fixed_t interceptfrac)
215215
return true; // corpse or something
216216

217217
// check angles to see if the thing can be aimed at
218-
FixedMul2(dist, sw->attackrange, interceptfrac);
218+
dist = FixedMul(sw->attackrange, interceptfrac);
219219

220220
thingaimtopslope = FixedDiv(th->z + th->height - sw->shootz, dist);
221221
if(thingaimtopslope < sw->aimbottomslope)
@@ -237,10 +237,10 @@ static boolean PA_ShootThing(shootWork_t *sw, mobj_t *th, fixed_t interceptfrac)
237237

238238
// position a bit closer
239239
frac = interceptfrac - FixedDiv(10*FRACUNIT, sw->attackrange);
240-
FixedMul2(sw->shootx, sw->shootdiv.dx, frac);
241-
FixedMul2(sw->shooty, sw->shootdiv.dy, frac);
242-
FixedMul2(tmp, frac, sw->attackrange);
243-
FixedMul2(tmp, sw->shootslope, tmp);
240+
sw->shootx = FixedMul(sw->shootdiv.dx, frac);
241+
sw->shooty = FixedMul(sw->shootdiv.dy, frac);
242+
tmp = FixedMul(frac, sw->attackrange);
243+
tmp = FixedMul(sw->shootslope, tmp);
244244

245245
sw->shootx = sw->shootdiv.x + sw->shootx;
246246
sw->shooty = sw->shootdiv.y + sw->shooty;
@@ -480,10 +480,10 @@ void P_Shoot2(lineattack_t *la)
480480

481481
// position a bit closer
482482
sw.firstlinefrac -= FixedDiv(4*FRACUNIT, la->attackrange);
483-
FixedMul2(la->shootx, sw.shootdiv.dx, sw.firstlinefrac);
484-
FixedMul2(la->shooty, sw.shootdiv.dy, sw.firstlinefrac);
485-
FixedMul2(tmp, sw.firstlinefrac, la->attackrange);
486-
FixedMul2(tmp, sw.aimmidslope, tmp);
483+
la->shootx = FixedMul(sw.shootdiv.dx, sw.firstlinefrac);
484+
la->shooty = FixedMul(sw.shootdiv.dy, sw.firstlinefrac);
485+
tmp = FixedMul(sw.firstlinefrac, la->attackrange);
486+
tmp = FixedMul(tmp, sw.aimmidslope);
487487

488488
la->shootx = sw.shootdiv.x + la->shootx;
489489
la->shooty = sw.shootdiv.y + la->shooty;

‎p_sight.c

+12-12
Original file line numberDiff line numberDiff line change
@@ -110,21 +110,21 @@ static fixed_t P_InterceptVector2(divline_t *v2, divline_t *v1)
110110
fixed_t num;
111111
fixed_t den, temp;
112112

113-
FixedMul2(temp, v1->dy,FRACUNIT/256);
114-
FixedMul2(den, temp,v2->dx);
113+
temp = FixedMul(v1->dy,FRACUNIT/256);
114+
den = FixedMul(temp,v2->dx);
115115

116-
FixedMul2(temp, v1->dx,FRACUNIT/256);
117-
FixedMul2(temp, temp, v2->dy);
116+
temp = FixedMul(v1->dx,FRACUNIT/256);
117+
temp = FixedMul(temp, v2->dy);
118118

119119
den = den - temp;
120120
if(den == 0)
121121
return 0;
122122

123-
FixedMul2(temp, (v2->y - v1->y),FRACUNIT/256);
124-
FixedMul2(temp, temp, v1->dx);
123+
temp = FixedMul((v2->y - v1->y),FRACUNIT/256);
124+
temp = FixedMul(temp, v1->dx);
125125

126-
FixedMul2(num, (v1->x - v2->x),FRACUNIT/256);
127-
FixedMul2(num, num, v1->dy);
126+
num = FixedMul((v1->x - v2->x),FRACUNIT/256);
127+
num = FixedMul(num, v1->dy);
128128

129129
num = num + temp;
130130
frac = FixedDiv(num, den);
@@ -133,15 +133,15 @@ static fixed_t P_InterceptVector2(divline_t *v2, divline_t *v1)
133133
fixed_t num;
134134
fixed_t den, temp;
135135

136-
FixedMul2(den, v1->dy>>8,v2->dx);
137-
FixedMul2(temp, v1->dx >> 8, v2->dy);
136+
den = FixedMul(v1->dy>>8,v2->dx);
137+
temp = FixedMul(v1->dx >> 8, v2->dy);
138138

139139
den = den - temp;
140140
if(den == 0)
141141
return 0;
142142

143-
FixedMul2(temp, (v2->y - v1->y) >> 8, v1->dx);
144-
FixedMul2(num, (v1->x - v2->x) >> 8, v1->dy);
143+
temp = FixedMul((v2->y - v1->y) >> 8, v1->dx);
144+
num = FixedMul((v1->x - v2->x) >> 8, v1->dy);
145145

146146
num = num + temp;
147147
frac = FixedDiv(num, den);

‎p_slide.c

+18-18
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ static int SL_PointOnSide(pslidework_t *sw, fixed_t x, fixed_t y)
6565
dx = x - sw->p1->x;
6666
dy = y - sw->p1->y;
6767

68-
FixedMul2(dx, dx, sw->nvx);
69-
FixedMul2(dy, dy, sw->nvy);
68+
dx = FixedMul(dx, sw->nvx);
69+
dy = FixedMul(dy, sw->nvy);
7070
dist = dx + dy;
7171

7272
if(dist > FRACUNIT)
@@ -85,16 +85,16 @@ static fixed_t SL_CrossFrac(pslidework_t *sw)
8585
fixed_t dx, dy, dist1, dist2;
8686

8787
// project move start and end points onto line normal
88-
dx = sw->p3x - sw->p1->x;
89-
dy = sw->p3y - sw->p1->y;
90-
FixedMul2(dx, dx, sw->nvx);
91-
FixedMul2(dy, dy, sw->nvy);
88+
dx = sw->p3x - sw->p1->x;
89+
dy = sw->p3y - sw->p1->y;
90+
dx = FixedMul(dx, sw->nvx);
91+
dy = FixedMul(dy, sw->nvy);
9292
dist1 = dx + dy;
9393

94-
dx = sw->p4x - sw->p1->x;
95-
dy = sw->p4y - sw->p1->y;
96-
FixedMul2(dx, dx, sw->nvx);
97-
FixedMul2(dy, dy, sw->nvy);
94+
dx = sw->p4x - sw->p1->x;
95+
dy = sw->p4y - sw->p1->y;
96+
dx = FixedMul(dx, sw->nvx);
97+
dy = FixedMul(dy, sw->nvy);
9898
dist2 = dx + dy;
9999

100100
if((dist1 < 0) == (dist2 < 0))
@@ -317,8 +317,8 @@ static int SL_PointOnSide2(fixed_t x1, fixed_t y1,
317317
nx = (y3 - y2);
318318
ny = (x2 - x3);
319319

320-
FixedMul2(nx, x1, nx);
321-
FixedMul2(ny, y1, ny);
320+
nx = FixedMul(x1, nx);
321+
ny = FixedMul(y1, ny);
322322
dist = nx + ny;
323323

324324
return ((dist < 0) ? SIDE_BACK : SIDE_FRONT);
@@ -473,8 +473,8 @@ void P_SlideMove(pslidemove_t *sm)
473473
if(frac < 0)
474474
frac = 0;
475475

476-
FixedMul2(rx, frac, dx);
477-
FixedMul2(ry, frac, dy);
476+
rx = FixedMul(frac, dx);
477+
ry = FixedMul(frac, dy);
478478

479479
sw.slidex += rx;
480480
sw.slidey += ry;
@@ -494,12 +494,12 @@ void P_SlideMove(pslidemove_t *sm)
494494
// project the remaining move along the line that blocked movement
495495
dx -= rx;
496496
dy -= ry;
497-
FixedMul2(dx, dx, sw.blocknvx);
498-
FixedMul2(dy, dy, sw.blocknvy);
497+
dx = FixedMul(dx, sw.blocknvx);
498+
dy = FixedMul(dy, sw.blocknvy);
499499
slide = dx + dy;
500500

501-
FixedMul2(dx, slide, sw.blocknvx);
502-
FixedMul2(dy, slide, sw.blocknvy);
501+
dx = FixedMul(slide, sw.blocknvx);
502+
dy = FixedMul(slide, sw.blocknvy);
503503
}
504504

505505
// some hideous situation has happened that won't let the player slide

‎r_phase2.c

+8-8
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,8 @@ static fixed_t R_ScaleFromGlobalAngle(fixed_t rw_distance, angle_t visangle, ang
249249
angleb = visangle - normalangle;
250250
sineb = finesine(angleb >> ANGLETOFINESHIFT);
251251

252-
FixedMul2(num, stretchX, sineb);
253-
FixedMul2(den, rw_distance, sinea);
252+
num = FixedMul(stretchX, sineb);
253+
den = FixedMul(rw_distance, sinea);
254254

255255
return FixedDiv(num, den);
256256
}
@@ -272,7 +272,7 @@ static void R_SetupCalc(viswall_t* wc, fixed_t hyp, angle_t normalangle, int ang
272272
offsetangle = ANG90;
273273

274274
sineval = finesine(offsetangle >> ANGLETOFINESHIFT);
275-
FixedMul2(rw_offset, hyp, sineval);
275+
rw_offset = FixedMul(hyp, sineval);
276276

277277
if (normalangle - angle1 < ANG180)
278278
rw_offset = -rw_offset;
@@ -304,7 +304,7 @@ static void R_WallLatePrep(viswall_t* wc, vertex_t *verts)
304304
distangle = ANG90 - offsetangle;
305305
hyp = R_PointToDist(verts[seg->v1].x, verts[seg->v1].y);
306306
sineval = finesine(distangle >> ANGLETOFINESHIFT);
307-
FixedMul2(rw_distance, hyp, sineval);
307+
rw_distance = FixedMul(hyp, sineval);
308308
wc->distance = rw_distance;
309309

310310
scalefrac = scale2 = wc->scalefrac =
@@ -416,14 +416,14 @@ static void R_SegLoop(viswall_t* segl, unsigned short* clipbounds,
416416
//
417417
// calc high and low
418418
//
419-
low = FixedMul3(scale2, floornewheight)>>FRACBITS;
419+
low = FixedMul(scale2, floornewheight)>>FRACBITS;
420420
low = cy - low;
421421
if (low < 0)
422422
low = 0;
423423
else if (low > floorclipx)
424424
low = floorclipx;
425425

426-
high = FixedMul3(scale2, ceilingnewheight)>>FRACBITS;
426+
high = FixedMul(scale2, ceilingnewheight)>>FRACBITS;
427427
high = cy - high;
428428
if (high > vh)
429429
high = vh;
@@ -457,7 +457,7 @@ static void R_SegLoop(viswall_t* segl, unsigned short* clipbounds,
457457
//
458458
if (flooropen)
459459
{
460-
top = FixedMul3(scale2, floorheight)>>FRACBITS;
460+
top = FixedMul(scale2, floorheight)>>FRACBITS;
461461
top = cy - top;
462462
if (top < ceilingclipx)
463463
top = ceilingclipx;
@@ -480,7 +480,7 @@ static void R_SegLoop(viswall_t* segl, unsigned short* clipbounds,
480480
if (ceilopen)
481481
{
482482
top = ceilingclipx;
483-
bottom = FixedMul3(scale2, ceilingheight)>>FRACBITS;
483+
bottom = FixedMul(scale2, ceilingheight)>>FRACBITS;
484484
bottom = cy - bottom;
485485
if (bottom > floorclipx)
486486
bottom = floorclipx;

‎r_phase3.c

+11-11
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,18 @@ static void R_PrepMobj(mobj_t *thing)
3535
tr_x = thing->x - vd.viewx;
3636
tr_y = thing->y - vd.viewy;
3737

38-
FixedMul2(gxt, tr_x, vd.viewcos);
39-
FixedMul2(gyt, tr_y, vd.viewsin);
38+
gxt = FixedMul(tr_x, vd.viewcos);
39+
gyt = FixedMul(tr_y, vd.viewsin);
4040
gyt = -gyt;
4141
tz = gxt - gyt;
4242

4343
// thing is behind view plane?
4444
if(tz < MINZ)
4545
return;
4646

47-
FixedMul2(gxt, tr_x, vd.viewsin);
47+
gxt = FixedMul(tr_x, vd.viewsin);
4848
gxt = -gxt;
49-
FixedMul2(gyt, tr_y, vd.viewcos);
49+
gyt = FixedMul(tr_y, vd.viewcos);
5050
tx = -(gyt + gxt);
5151

5252
// too far off the side?
@@ -92,28 +92,28 @@ static void R_PrepMobj(mobj_t *thing)
9292

9393
// calculate edges of the shape
9494
tx -= ((fixed_t)BIGSHORT(patch->leftoffset)) << FRACBITS;
95-
FixedMul2(x1, tx, xscale);
95+
x1 = FixedMul(tx, xscale);
9696
x1 = (centerXFrac + x1) / FRACUNIT;
9797

9898
// off the right side?
9999
if (x1 > viewportWidth)
100100
return;
101101

102102
tx += ((fixed_t)BIGSHORT(patch->width) << FRACBITS);
103-
FixedMul2(x2, tx, xscale);
103+
x2 = FixedMul(tx, xscale);
104104
x2 = ((centerXFrac + x2) / FRACUNIT) - 1;
105105

106106
// off the left side
107107
if (x2 < 0)
108108
return;
109109

110110
// killough 4/9/98: clip things which are out of view due to height
111-
FixedMul2(tz, gzt, xscale);
111+
tz = FixedMul(gzt, xscale);
112112
if (tz > centerYFrac)
113113
return;
114114

115115
texmid = gzt + ((fixed_t)BIGSHORT(patch->topoffset) << FRACBITS);
116-
FixedMul2(tz, texmid, xscale);
116+
tz = FixedMul(texmid, xscale);
117117
if (tz < viewportHeight - centerYFrac)
118118
return;
119119

@@ -134,7 +134,7 @@ static void R_PrepMobj(mobj_t *thing)
134134
vis->gy = thing->y / FRACUNIT;
135135
vis->xscale = xscale;
136136
vis->xiscale = FixedDiv(FRACUNIT, xscale);
137-
FixedMul2(vis->yscale, xscale, stretch);
137+
vis->yscale = FixedMul(xscale, stretch);
138138
vis->texturemid = texmid;
139139
vis->startfrac = 0;
140140

@@ -199,10 +199,10 @@ static void R_PrepPSprite(pspdef_t *psp)
199199

200200
// calculate edges of the shape
201201
tx = tx - (((fixed_t)BIGSHORT(patch->leftoffset)) << FRACBITS);
202-
FixedMul2(x1, tx, xscale);
202+
x1 = FixedMul(tx, xscale);
203203

204204
tx = ((fixed_t)BIGSHORT(patch->width) << FRACBITS);
205-
FixedMul2(x2, tx, xscale);
205+
x2 = FixedMul(tx, xscale);
206206
x2 += x1;
207207

208208
x1 /= FRACUNIT;

0 commit comments

Comments
 (0)