================
@@ -430,6 +430,78 @@ static bool interp__builtin_iszero(InterpState &S, CodePtr 
OpPC,
   return true;
 }
 
+static bool interp__builtin_signbit(InterpState &S, CodePtr OpPC,
+                                    const InterpFrame *Frame, const Function 
*F,
+                                    const CallExpr *Call) {
+  const Floating &Arg = S.Stk.peek<Floating>();
+
+  pushInteger(S, Arg.isNegative(), Call->getType());
+  return true;
+}
+
+static bool interp_floating_comparison(InterpState &S, CodePtr OpPC,
+                                       const InterpFrame *Frame,
+                                       const Function *F,
+                                       const CallExpr *Call) {
+  const Floating &RHS = S.Stk.peek<Floating>();
+  const Floating &LHS = S.Stk.peek<Floating>(align(2u * primSize(PT_Float)));
+  unsigned ID = F->getBuiltinID();
+  assert(ID == Builtin::BI__builtin_isgreater ||
+         ID == Builtin::BI__builtin_isgreaterequal ||
+         ID == Builtin::BI__builtin_isless ||
+         ID == Builtin::BI__builtin_islessequal ||
+         ID == Builtin::BI__builtin_islessgreater ||
+         ID == Builtin::BI__builtin_isunordered);
+
+  ComparisonCategoryResult Cmp = LHS.compare(RHS);
+  bool FunctionResult;
+  if (ID == Builtin::BI__builtin_isunordered ||
----------------
MitalAshok wrote:

It turned out much nicer when I switched on the builtin ID first, so there's 
not much left to share. This could be extracted to a `bool 
ComparisonFunction(unsigned BuiltinID, const APFloat &LHS, const APFloat 
&RHS)`, but I don't know where I could put that so that ExprConstant.cpp and 
InterpBuiltin.cpp could both access it

https://github.com/llvm/llvm-project/pull/94118
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to