blob: 6b1b3d4ab0be780093f311bbc3966078c5eec77f [file] [log] [blame]
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001/* NOCW */
2/* sgibug.c */
3/* bug found by Eric Young (eay@mincom.oz.au) May 95 */
4
5#include <stdio.h>
6
Matt Caswell0f113f32015-01-22 03:40:55 +00007/*
8 * This compiler bug it present on IRIX 5.3, 5.1 and 4.0.5 (these are the
9 * only versions of IRIX I have access to. defining FIXBUG removes the bug.
10 * (bug is still present in IRIX 6.3 according to Gage
11 * <agage@forgetmenot.Mines.EDU>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000012 */
Matt Caswell0f113f32015-01-22 03:40:55 +000013
Matt Caswellc80fd6b2015-01-16 09:21:50 +000014/*-
15 * Compare the output from
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000016 * cc sgiccbug.c; ./a.out
17 * and
18 * cc -O sgiccbug.c; ./a.out
19 */
20
Matt Caswell0f113f32015-01-22 03:40:55 +000021static unsigned long a[4] =
22 { 0x01234567, 0x89ABCDEF, 0xFEDCBA98, 0x76543210 };
23static unsigned long b[4] =
24 { 0x89ABCDEF, 0xFEDCBA98, 0x76543210, 0x01234567 };
25static unsigned long c[4] =
26 { 0x77777778, 0x8ACF1357, 0x88888888, 0x7530ECA9 };
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000027
28main()
Matt Caswell0f113f32015-01-22 03:40:55 +000029{
30 unsigned long r[4];
31 sub(r, a, b);
32 fprintf(stderr, "input a= %08X %08X %08X %08X\n", a[3], a[2], a[1], a[0]);
33 fprintf(stderr, "input b= %08X %08X %08X %08X\n", b[3], b[2], b[1], b[0]);
34 fprintf(stderr, "output = %08X %08X %08X %08X\n", r[3], r[2], r[1], r[0]);
35 fprintf(stderr, "correct= %08X %08X %08X %08X\n", c[3], c[2], c[1], c[0]);
36}
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000037
Matt Caswell0f113f32015-01-22 03:40:55 +000038int sub(r, a, b)
39unsigned long *r, *a, *b;
40{
41 register unsigned long t1, t2, *ap, *bp, *rp;
42 int i, carry;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000043#ifdef FIXBUG
Matt Caswell0f113f32015-01-22 03:40:55 +000044 unsigned long dummy;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000045#endif
46
Matt Caswell0f113f32015-01-22 03:40:55 +000047 ap = a;
48 bp = b;
49 rp = r;
50 carry = 0;
51 for (i = 0; i < 4; i++) {
52 t1 = *(ap++);
53 t2 = *(bp++);
54 t1 = (t1 - t2);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000055#ifdef FIXBUG
Matt Caswell0f113f32015-01-22 03:40:55 +000056 dummy = t1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000057#endif
Matt Caswell0f113f32015-01-22 03:40:55 +000058 *(rp++) = t1 & 0xffffffff;
59 }
60}