aboutsummaryrefslogtreecommitdiff
path: root/pseudocode/operators/WHILE_LOOP.tosac
diff options
context:
space:
mode:
Diffstat (limited to 'pseudocode/operators/WHILE_LOOP.tosac')
-rw-r--r--pseudocode/operators/WHILE_LOOP.tosac33
1 files changed, 33 insertions, 0 deletions
diff --git a/pseudocode/operators/WHILE_LOOP.tosac b/pseudocode/operators/WHILE_LOOP.tosac
new file mode 100644
index 0000000..dae96d5
--- /dev/null
+++ b/pseudocode/operators/WHILE_LOOP.tosac
@@ -0,0 +1,33 @@
+//
+// This confidential and proprietary software may be used only as
+// authorised by a licensing agreement from ARM Limited
+// (C) COPYRIGHT 2020-2024 ARM Limited
+// ALL RIGHTS RESERVED
+// The entire notice above must be reproduced on all authorised
+// copies and copies may only be made to the extent permitted
+// by a licensing agreement from ARM Limited.
+
+ERROR_IF(tosa_nesting_depth >= MAX_NESTING);
+ERROR_IF(tensor_list_shape(input_list) != tosa_list_shape(output_list));
+ERROR_IF(tensor_list_shape(input_list) != tosa_input_shape(cond_graph));
+ERROR_IF(tensor_list_shape(input_list) != tosa_input_shape(body_graph));
+ERROR_IF(tensor_list_shape(input_list) != tosa_output_shape(body_graph));
+// Condition graph output must be a single element tensor with a single bool value
+ERROR_IF(tensor_size(tosa_output_shape(cond_graph)) != 1);
+ERROR_IF(tosa_output_type(cond_graph) != bool_t);
+
+// The iteration number 'i' is included to give unique names to variables
+// in each iteration of the loop and is not required by implementations
+int32_t i=0; // iteration number
+tensor_list_t list[]; // array of tensor lists indexed by iteration
+bool_t *condition[]; // array of condition tensors indexed by iteration
+list[i] = input_list; // copy input data as list[0]
+tosa_nesting_depth++;
+tosa_execute_graph(cond_graph, list[i], [ condition[i] ]); // initial condition
+while (condition[i][0]) {
+ tosa_execute_graph(body_graph, list[i], list[i+1]);
+ i = i+1;
+ tosa_execute_graph(cond_graph, list[i], [ condition[i] ]);
+}
+tosa_nesting_depth--;
+output_list = list[i];