tcg: Save flags and computed sizemask in TCGHelperInfo
Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
		
							parent
							
								
									72866e823e
								
							
						
					
					
						commit
						afb49896fa
					
				@ -6,22 +6,34 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <exec/helper-head.h>
 | 
					#include <exec/helper-head.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEF_HELPER_FLAGS_0(name, flags, ret)  { HELPER(name), #name },
 | 
					#define DEF_HELPER_FLAGS_0(NAME, FLAGS, ret) \
 | 
				
			||||||
 | 
					  { .func = HELPER(NAME), .name = #NAME, .flags = FLAGS, \
 | 
				
			||||||
 | 
					    .sizemask = dh_sizemask(ret, 0) },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \
 | 
					#define DEF_HELPER_FLAGS_1(NAME, FLAGS, ret, t1) \
 | 
				
			||||||
DEF_HELPER_FLAGS_0(name, flags, ret)
 | 
					  { .func = HELPER(NAME), .name = #NAME, .flags = FLAGS, \
 | 
				
			||||||
 | 
					    .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \
 | 
					#define DEF_HELPER_FLAGS_2(NAME, FLAGS, ret, t1, t2) \
 | 
				
			||||||
DEF_HELPER_FLAGS_0(name, flags, ret)
 | 
					  { .func = HELPER(NAME), .name = #NAME, .flags = FLAGS, \
 | 
				
			||||||
 | 
					    .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \
 | 
				
			||||||
 | 
					    | dh_sizemask(t2, 2) },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \
 | 
					#define DEF_HELPER_FLAGS_3(NAME, FLAGS, ret, t1, t2, t3) \
 | 
				
			||||||
DEF_HELPER_FLAGS_0(name, flags, ret)
 | 
					  { .func = HELPER(NAME), .name = #NAME, .flags = FLAGS, \
 | 
				
			||||||
 | 
					    .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) \
 | 
					#define DEF_HELPER_FLAGS_4(NAME, FLAGS, ret, t1, t2, t3, t4) \
 | 
				
			||||||
DEF_HELPER_FLAGS_0(name, flags, ret)
 | 
					  { .func = HELPER(NAME), .name = #NAME, .flags = FLAGS, \
 | 
				
			||||||
 | 
					    .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) \
 | 
					#define DEF_HELPER_FLAGS_5(NAME, FLAGS, ret, t1, t2, t3, t4, t5) \
 | 
				
			||||||
DEF_HELPER_FLAGS_0(name, flags, ret)
 | 
					  { .func = HELPER(NAME), .name = #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) },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "helper.h"
 | 
					#include "helper.h"
 | 
				
			||||||
#include "tcg-runtime.h"
 | 
					#include "tcg-runtime.h"
 | 
				
			||||||
 | 
				
			|||||||
@ -310,6 +310,8 @@ void tcg_pool_reset(TCGContext *s)
 | 
				
			|||||||
typedef struct TCGHelperInfo {
 | 
					typedef struct TCGHelperInfo {
 | 
				
			||||||
    void *func;
 | 
					    void *func;
 | 
				
			||||||
    const char *name;
 | 
					    const char *name;
 | 
				
			||||||
 | 
					    unsigned flags;
 | 
				
			||||||
 | 
					    unsigned sizemask;
 | 
				
			||||||
} TCGHelperInfo;
 | 
					} TCGHelperInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "exec/helper-proto.h"
 | 
					#include "exec/helper-proto.h"
 | 
				
			||||||
@ -696,6 +698,11 @@ void tcg_gen_callN(TCGContext *s, void *func, unsigned int flags,
 | 
				
			|||||||
    int real_args;
 | 
					    int real_args;
 | 
				
			||||||
    int nb_rets;
 | 
					    int nb_rets;
 | 
				
			||||||
    TCGArg *nparam;
 | 
					    TCGArg *nparam;
 | 
				
			||||||
 | 
					    TCGHelperInfo *info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    info = g_hash_table_lookup(s->helpers, (gpointer)func);
 | 
				
			||||||
 | 
					    assert(info != NULL);
 | 
				
			||||||
 | 
					    assert(info->sizemask == sizemask);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__sparc__) && !defined(__arch64__) \
 | 
					#if defined(__sparc__) && !defined(__arch64__) \
 | 
				
			||||||
    && !defined(CONFIG_TCG_INTERPRETER)
 | 
					    && !defined(CONFIG_TCG_INTERPRETER)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user