Port ClTemplateCast into Ckw

Resolves COMPMID-6257

Signed-off-by: Adnan AlSinan <adnan.alsinan@arm.com>
Change-Id: I3e56ff1f1109924da02d0abd0354a3f1fa095ee7
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/9914
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Nikolaj Jensen <nikolaj.jensen@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
diff --git a/compute_kernel_writer/prototype/src/Prototype.h b/compute_kernel_writer/prototype/src/Prototype.h
index b9f1efa..72fa419 100644
--- a/compute_kernel_writer/prototype/src/Prototype.h
+++ b/compute_kernel_writer/prototype/src/Prototype.h
@@ -1581,6 +1581,8 @@
     {
         case UnaryOp::LogicalNot:
             return "!";
+        case UnaryOp::BitwiseNot:
+            return "~";
         default:
             assert(false);
             return "";
@@ -1615,6 +1617,8 @@
             return "&&";
         case BinaryOp::LogicalOr:
             return "||";
+        case BinaryOp::BitwiseXOR:
+            return "^";
         default:
             assert(false);
             return "";
@@ -3570,11 +3574,11 @@
         OperandUnpacker    operands(_data->tiles, _data->arguments);
         const IVectorTile *src = operands.unpack(o_src);
         const IVectorTile *dst = operands.unpack(o_dst);
-
         // const int32_t dst_w  = dst->format().w;
         const int32_t     dst_h = dst->format().h;
         const std::string dt    = dst->underlying_source_variables()[0].type.str;
-        const std::string sat   = (policy == ConvertPolicy::Saturate ? "_sat" : "");
+        const bool is_float     = (dst->format().dt == DataType::Fp32) || (dst->format().dt == DataType::Fp16);
+        const std::string sat   = ((policy == ConvertPolicy::Saturate && !is_float) ? "_sat" : "");
 
         // Broadcasting on Y is automatic
         for(int32_t y = 0; y < dst_h; ++y)