mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 20:30:01 +00:00 
			
		
		
		
	 e6cadf49c3
			
		
	
	
		e6cadf49c3
		
	
	
	
	
		
			
			Currently, helpers can only take up to 6 arguments. This patch adds the capability for up to 7 arguments. I have tested it with the Hexagon port that I am preparing for submission. Signed-off-by: Taylor Simpson <tsimpson@quicinc.com> Message-Id: <1580942510-2820-1-git-send-email-tsimpson@quicinc.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Helper file for declaring TCG helper functions.
 | |
|    This one defines data structures private to tcg.c.  */
 | |
| 
 | |
| #ifndef HELPER_TCG_H
 | |
| #define HELPER_TCG_H
 | |
| 
 | |
| #include "exec/helper-head.h"
 | |
| 
 | |
| /* Need one more level of indirection before stringification
 | |
|    to get all the macros expanded first.  */
 | |
| #define str(s) #s
 | |
| 
 | |
| #define DEF_HELPER_FLAGS_0(NAME, FLAGS, ret) \
 | |
|   { .func = HELPER(NAME), .name = str(NAME), \
 | |
|     .flags = FLAGS | dh_callflag(ret), \
 | |
|     .sizemask = dh_sizemask(ret, 0) },
 | |
| 
 | |
| #define DEF_HELPER_FLAGS_1(NAME, FLAGS, ret, t1) \
 | |
|   { .func = HELPER(NAME), .name = str(NAME), \
 | |
|     .flags = FLAGS | dh_callflag(ret), \
 | |
|     .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) },
 | |
| 
 | |
| #define DEF_HELPER_FLAGS_2(NAME, FLAGS, ret, t1, t2) \
 | |
|   { .func = HELPER(NAME), .name = str(NAME), \
 | |
|     .flags = FLAGS | dh_callflag(ret), \
 | |
|     .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \
 | |
|     | dh_sizemask(t2, 2) },
 | |
| 
 | |
| #define DEF_HELPER_FLAGS_3(NAME, FLAGS, ret, t1, t2, t3) \
 | |
|   { .func = HELPER(NAME), .name = str(NAME), \
 | |
|     .flags = FLAGS | dh_callflag(ret), \
 | |
|     .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \
 | |
|     | dh_sizemask(t2, 2) | dh_sizemask(t3, 3) },
 | |
| 
 | |
| #define DEF_HELPER_FLAGS_4(NAME, FLAGS, ret, t1, t2, t3, t4) \
 | |
|   { .func = HELPER(NAME), .name = str(NAME), \
 | |
|     .flags = FLAGS | dh_callflag(ret), \
 | |
|     .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \
 | |
|     | dh_sizemask(t2, 2) | dh_sizemask(t3, 3) | dh_sizemask(t4, 4) },
 | |
| 
 | |
| #define DEF_HELPER_FLAGS_5(NAME, FLAGS, ret, t1, t2, t3, t4, t5) \
 | |
|   { .func = HELPER(NAME), .name = str(NAME), \
 | |
|     .flags = FLAGS | dh_callflag(ret), \
 | |
|     .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \
 | |
|     | dh_sizemask(t2, 2) | dh_sizemask(t3, 3) | dh_sizemask(t4, 4) \
 | |
|     | dh_sizemask(t5, 5) },
 | |
| 
 | |
| #define DEF_HELPER_FLAGS_6(NAME, FLAGS, ret, t1, t2, t3, t4, t5, t6) \
 | |
|   { .func = HELPER(NAME), .name = str(NAME), \
 | |
|     .flags = FLAGS | dh_callflag(ret), \
 | |
|     .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \
 | |
|     | dh_sizemask(t2, 2) | dh_sizemask(t3, 3) | dh_sizemask(t4, 4) \
 | |
|     | dh_sizemask(t5, 5) | dh_sizemask(t6, 6) },
 | |
| 
 | |
| #define DEF_HELPER_FLAGS_7(NAME, FLAGS, ret, t1, t2, t3, t4, t5, t6, t7) \
 | |
|   { .func = HELPER(NAME), .name = str(NAME), .flags = FLAGS, \
 | |
|     .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \
 | |
|     | dh_sizemask(t2, 2) | dh_sizemask(t3, 3) | dh_sizemask(t4, 4) \
 | |
|     | dh_sizemask(t5, 5) | dh_sizemask(t6, 6) | dh_sizemask(t7, 7) },
 | |
| 
 | |
| #include "helper.h"
 | |
| #include "trace/generated-helpers.h"
 | |
| #include "tcg-runtime.h"
 | |
| #include "plugin-helpers.h"
 | |
| 
 | |
| #undef str
 | |
| #undef DEF_HELPER_FLAGS_0
 | |
| #undef DEF_HELPER_FLAGS_1
 | |
| #undef DEF_HELPER_FLAGS_2
 | |
| #undef DEF_HELPER_FLAGS_3
 | |
| #undef DEF_HELPER_FLAGS_4
 | |
| #undef DEF_HELPER_FLAGS_5
 | |
| #undef DEF_HELPER_FLAGS_6
 | |
| #undef DEF_HELPER_FLAGS_7
 | |
| 
 | |
| #endif /* HELPER_TCG_H */
 |