improve performance of some extensible Standard Functions (ADD, MUL, AND, OR, XOR) -- Add comments!!
authorMario de Sousa <msousa@fe.up.pt>
Fri, 02 Feb 2018 18:31:40 +0000
changeset 1068 222879991f44
parent 1067 ce81fa6d9024
child 1069 0b275a2c7c2b
improve performance of some extensible Standard Functions (ADD, MUL, AND, OR, XOR) -- Add comments!!
lib/C/iec_std_functions.h
--- a/lib/C/iec_std_functions.h	Fri Feb 02 18:15:48 2018 +0000
+++ b/lib/C/iec_std_functions.h	Fri Feb 02 18:31:40 2018 +0000
@@ -493,6 +493,28 @@
 /***   Table 24 - Standard arithmetic functions    ***/
 /*****************************************************/
 
+/* NOTE: unlike all other standard functions, the arithmetic based (extensible) functions
+ *       (ADD, MUL, AND, OR, XOR) have several implementations:
+ *        - 8 optimized versions for when the functon is called with 1 to 8 INput parameters
+ *        - an extra non-optimized version for every other case. 
+ *       
+ *       This means that instead of the functions usually named 
+ *           ADD_TTTT() 
+ *           ADD__TTTT__TTTT()        (where TTTT is a type, e.g. INT)
+ *       we have instead
+ *           ADD_TTTT1(),  ADD_TTTT2(), ... ,ADD_TTTT8()
+ *           ADD_TTTTX()              
+ *           ADD_TTTT_VAR()           
+ *           ADD__TTTT__TTTT1(), ..., ADD__TTTT__TTTT8()       
+ *           ADD__TTTT__TTTT_VAR()    
+ *       
+ *       The standard names
+ *           ADD_TTTT() 
+ *           ADD__TTTT__TTTT()
+ *       are instead later (in this .h file) declared as macros, which will choose
+ *       at compilation time the correct version/implementation to call
+ *       based on the number of input parameters in that specific call.
+ */
 #define __arith_expand(fname, TYPENAME, OP)				\
 									\
 	static inline TYPENAME fname##1(EN_ENO_PARAMS			\