From 1135ec9138dbef8ba32ac251b99c31e544e33fd3 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Tue, 8 Mar 2022 16:37:19 -0500 Subject: [PATCH] fixed up comparison operations of Reals --- cerise/backend/ssa/codegen.c | 12 +-- cerise/tests/Module.m | 154 +++++++++++++++++++++++------------ 2 files changed, 107 insertions(+), 59 deletions(-) diff --git a/cerise/backend/ssa/codegen.c b/cerise/backend/ssa/codegen.c index 6da63e2..01ad1ac 100644 --- a/cerise/backend/ssa/codegen.c +++ b/cerise/backend/ssa/codegen.c @@ -223,12 +223,12 @@ char* binop_name(SsaNode* node) case '/': name = "fdiv"; break; case '%': name = "frem"; break; - case EQ: name = "fcmp eq"; break; - case NEQ: name = "fcmp ne"; break; - case '<': name = "fcmp slt"; break; - case '>': name = "fcmp sgt"; break; - case LTEQ: name = "fcmp sle"; break; - case GTEQ: name = "fcmp sge"; break; + case EQ: name = "fcmp oeq"; break; + case NEQ: name = "fcmp une"; break; + case '<': name = "fcmp olt"; break; + case '>': name = "fcmp ogt"; break; + case LTEQ: name = "fcmp ole"; break; + case GTEQ: name = "fcmp oge"; break; } } else diff --git a/cerise/tests/Module.m b/cerise/tests/Module.m index 8086199..9f051a7 100644 --- a/cerise/tests/Module.m +++ b/cerise/tests/Module.m @@ -36,11 +36,12 @@ var b* : Int c : Int d : Real - e : array 5 of array 10 of Int - f : TypeD - g : array 5 of Int - h : TypeF - i : TypeA + e : Real + f : array 5 of array 10 of Int + g : TypeD + h : array 5 of Int + i : TypeF + j : TypeA #procedure Foo*(e : Int, z : Int, q1 : TypeD, q2 : array 5 of Int) : Int # const FOO = 2 @@ -72,54 +73,102 @@ var begin # Global variables - i = 42; - b = i; + b = 42; + b = j; + + # Integer Arithmetic ops + c = b + 1; + c = 1 + b; + c = b + b; + + c = b - 1; + c = 1 - b; + c = b - b; + + c = b * 1; + c = 1 * b; + c = b * b; + + c = b / 1; + c = 1 / b; + c = b / b; + + c = b % 1; + c = 1 % b; + c = b % b; + + # Integer Comparison ops + a = b == 1; + a = 1 == b; + a = b == b; + + a = b != 1; + a = 1 != b; + a = b != b; + + a = b < 1; + a = 1 < b; + a = b < b; + + a = b > 1; + a = 1 > b; + a = b > b; + + a = b <= 1; + a = 1 <= b; + a = b <= b; + + a = b >= 1; + a = 1 >= b; + a = b >= b; + + # Real Arithmetic ops + e = d + 1.0; + e = 1.0 + d; + e = d + d; + + e = d - 1.0; + e = 1.0 - d; + e = d - d; + + e = d * 1.0; + e = 1.0 * d; + e = d * d; + + e = d / 1.0; + e = 1.0 / d; + e = d / d; + + e = d % 1.0; + e = 1.0 % d; + e = d % d; + + # Real Comparison ops + a = d == 1.0; + a = 1.0 == d; + a = d == d; + + a = d != 1.0; + a = 1.0 != d; + a = d != d; + + a = d < 1.0; + a = 1.0 < d; + a = d < d; + + a = d > 1.0; + a = 1.0 > d; + a = d > d; + + a = d <= 1.0; + a = 1.0 <= d; + a = d <= d; + + a = d >= 1.0; + a = 1.0 >= d; + a = d >= d; + -# # Arithmetic ops -# c = b + 1; -# c = 1 + b; -# c = b + b; -# -# c = b - 1; -# c = 1 - b; -# c = b - b; -# -# c = b * 1; -# c = 1 * b; -# c = b * b; -# -# c = b / 1; -# c = 1 / b; -# c = b / b; -# -# c = b % 1; -# c = 1 % b; -# c = b % b; - -# # Comparison ops -# a = b == 1; -# a = 1 == b; -# a = b == b; -# -# a = b != 1; -# a = 1 != b; -# a = b != b; -# -# a = b < 1; -# a = 1 < b; -# a = b < b; -# -# a = b > 1; -# a = 1 > b; -# a = b > b; -# -# a = b <= 1; -# a = 1 <= b; -# a = b <= b; -# -# a = b >= 1; -# a = 1 >= b; -# a = b >= b; # b = 1; # if c == b then @@ -148,7 +197,6 @@ begin # b = 24; # end - # h[1].i = 42; # a = true; # a = A; -- 2.49.0