[qfcc] Modify the modulo tests to be compatible with Ruamoko ISA

Surprisingly, it passes (I didn't expect it to due to the doubles). I'll
look into to it further later on.
This commit is contained in:
Bill Currie 2022-02-01 13:26:01 +09:00
parent 64c8c02eac
commit e0c5c475ea

View file

@ -1,3 +1,7 @@
#if !defined(__RUAMOKO__) || __RUAMOKO__ < 2
# define test_traditional
#endif
void printf (string ftm, ...) = #0; void printf (string ftm, ...) = #0;
float snafu (float a, float b) float snafu (float a, float b)
@ -21,6 +25,7 @@ double dmodulo (double a, double b)
return a %% b; return a %% b;
} }
#ifdef test_traditional
#pragma traditional #pragma traditional
float foo (float a, float b) float foo (float a, float b)
{ {
@ -45,6 +50,7 @@ float baz (float a, float b)
return c; return c;
} }
#pragma advanced #pragma advanced
#endif
@overload int @overload int
test (string name, string op, int (func)(int a, int b), int a, int b, int c) test (string name, string op, int (func)(int a, int b), int a, int b, int c)
@ -53,10 +59,12 @@ test (string name, string op, int (func)(int a, int b), int a, int b, int c)
ret = func (a, b); ret = func (a, b);
if (ret != c) { if (ret != c) {
#ifdef test_traditional
if (func == baz) if (func == baz)
printf ("%s: (%d + %d) %% (%d - %d): %d != %d\n", printf ("%s: (%d + %d) %% (%d - %d): %d != %d\n",
name, a, b, a, b, ret, c); name, a, b, a, b, ret, c);
else else
#endif
printf ("%s: %d %s %d: %d != %d\n", printf ("%s: %d %s %d: %d != %d\n",
name, a, op, b, ret, c); name, a, op, b, ret, c);
return 1; return 1;
@ -72,10 +80,12 @@ test (string name, string op, float (func)(float a, float b),
ret = func (a, b); ret = func (a, b);
if (ret != c) { if (ret != c) {
#ifdef test_traditional
if (func == baz) if (func == baz)
printf ("%s: (%g + %g) %% (%g - %g): %g != %g\n", printf ("%s: (%g + %g) %% (%g - %g): %g != %g\n",
name, a, b, a, b, ret, c); name, a, b, a, b, ret, c);
else else
#endif
printf ("%s: %g %s %g: %g != %g\n", printf ("%s: %g %s %g: %g != %g\n",
name, a, op, b, ret, c); name, a, op, b, ret, c);
return 1; return 1;
@ -91,42 +101,55 @@ test (string name, string op, double (func)(double a, double b),
ret = func (a, b); ret = func (a, b);
if (ret != c) { if (ret != c) {
#ifdef test_traditional
if (func == baz) if (func == baz)
printf ("%s: (%g + %g) %% (%g - %g): %g != %g\n", printf ("%s: (%g + %g) %% (%g - %g): %g != %g\n",
name, a, b, a, b, ret, c); name, a, b, a, b, ret, c);
else else
#endif
printf ("%s: %g %s %g: %g != %g\n", printf ("%s: %g %s %g: %g != %g\n",
name, a, op, b, ret, c); name, a, op, b, ret, c);
return 1; return 1;
} }
return 0; return 0;
} }
#ifdef test_traditional
typedef float restype;
#else
typedef int restype;
#endif
float main (void) restype main (void)
{ {
float res = 0; restype res = 0;
#ifdef test_traditional
res |= test ("foo", "%", foo, 5, 3, 2); res |= test ("foo", "%", foo, 5, 3, 2);
res |= test ("bar", "%", bar, 5, 3, 2); res |= test ("bar", "%", bar, 5, 3, 2);
res |= test ("baz", "%", baz, 5, 3, 0); res |= test ("baz", "%", baz, 5, 3, 0);
#endif
res |= test ("snafu", "%", snafu, 5, 3, 2); res |= test ("snafu", "%", snafu, 5, 3, 2);
#ifdef test_traditional
res |= test ("foo", "%", foo, -5, 3, -2); res |= test ("foo", "%", foo, -5, 3, -2);
res |= test ("bar", "%", bar, -5, 3, -2); res |= test ("bar", "%", bar, -5, 3, -2);
res |= test ("baz", "%", baz, -5, 3, -2); res |= test ("baz", "%", baz, -5, 3, -2);
#endif
res |= test ("snafu", "%", snafu, -5, 3, -2); res |= test ("snafu", "%", snafu, -5, 3, -2);
#ifdef test_traditional
res |= test ("foo", "%", foo, 5, -3, 2); res |= test ("foo", "%", foo, 5, -3, 2);
res |= test ("bar", "%", bar, 5, -3, 2); res |= test ("bar", "%", bar, 5, -3, 2);
res |= test ("baz", "%", baz, 5, -3, 2); res |= test ("baz", "%", baz, 5, -3, 2);
#endif
res |= test ("snafu", "%", snafu, 5, -3, 2); res |= test ("snafu", "%", snafu, 5, -3, 2);
#ifdef test_traditional
res |= test ("foo", "%", foo, -5, -3, -2); res |= test ("foo", "%", foo, -5, -3, -2);
res |= test ("bar", "%", bar, -5, -3, -2); res |= test ("bar", "%", bar, -5, -3, -2);
res |= test ("baz", "%", baz, -5, -3, 0); res |= test ("baz", "%", baz, -5, -3, 0);
#endif
res |= test ("snafu", "%", snafu, -5, -3, -2); res |= test ("snafu", "%", snafu, -5, -3, -2);
#ifdef test_traditional
res |= test ("foo", "%", foo, 5, 3.5, 1.5); res |= test ("foo", "%", foo, 5, 3.5, 1.5);
res |= test ("foo", "%", foo, -5, 3.5, -1.5); res |= test ("foo", "%", foo, -5, 3.5, -1.5);
#endif
res |= test ("snafu", "%", snafu, 5, 3.5, 1.5); res |= test ("snafu", "%", snafu, 5, 3.5, 1.5);
res |= test ("snafu", "%", snafu, -5, 3.5, -1.5); res |= test ("snafu", "%", snafu, -5, 3.5, -1.5);