jit_value jit_function::new_constant(jit_nfloat value, jit_type_t type)
{
	if(!type)
	{
		type = jit_type_nfloat;
	}
	value_wrap(jit_value_create_nfloat_constant(func, type, value));
}
/*
 * Initialize the local value to 0.
 */
static int _ILJitLocalInit(ILJITCoder *coder, ILJitLocalSlot *slot)
{
	if((slot->flags & _IL_JIT_VALUE_INITIALIZED) == 0)
	{
		ILJitType type = jit_value_get_type(slot->value);

		if(!jit_type_is_struct(type))
		{
			int typeKind = jit_type_get_kind(type);
			ILJitValue constant = 0;

			if(_JIT_TYPEKIND_IS_FLOAT(typeKind))
			{
				if(!(constant = jit_value_create_nfloat_constant(coder->jitFunction,
															type,
															(jit_nfloat)0)))
				{
					return 0;
				}
				jit_insn_store(coder->jitFunction, slot->value, constant);
			}
			else
			{
				if(_JIT_TYPEKIND_IS_LONG(typeKind))
				{
					if(!(constant = jit_value_create_long_constant(coder->jitFunction,
															  type, (jit_long)0)))
					{
						return 0;
					}
					jit_insn_store(coder->jitFunction, slot->value, constant);
				}
				else
				{
					if(!(constant = jit_value_create_nint_constant(coder->jitFunction,
															  type, (jit_nint)0)))
					{
						return 0;
					}
					jit_insn_store(coder->jitFunction, slot->value, constant);
				}
			}
		}
		slot->flags |= _IL_JIT_VALUE_INITIALIZED;
	}
	return 1;
}
Exemple #3
0
/*@
 * @deftypefun jit_value_t jit_value_create_constant (jit_function_t @var{func}, const jit_constant_t *@var{const_value})
 * Create a new constant from a generic constant structure in the specified
 * function.  Returns NULL if out of memory or if the type in
 * @var{const_value} is not suitable for a constant.
 * @end deftypefun
@*/
jit_value_t
jit_value_create_constant(jit_function_t func, const jit_constant_t *const_value)
{
	jit_type_t stripped = jit_type_remove_tags(const_value->type);
	if(!stripped)
	{
		return 0;
	}
	switch(stripped->kind)
	{
	case JIT_TYPE_SBYTE:
	case JIT_TYPE_UBYTE:
	case JIT_TYPE_SHORT:
	case JIT_TYPE_USHORT:
	case JIT_TYPE_INT:
	case JIT_TYPE_UINT:
		return jit_value_create_nint_constant(func, const_value->type,
						      const_value->un.int_value);

	case JIT_TYPE_NINT:
	case JIT_TYPE_NUINT:
	case JIT_TYPE_PTR:
	case JIT_TYPE_SIGNATURE:
		return jit_value_create_nint_constant(func, const_value->type,
						      const_value->un.nint_value);

	case JIT_TYPE_LONG:
	case JIT_TYPE_ULONG:
		return jit_value_create_long_constant(func, const_value->type,
						      const_value->un.long_value);

	case JIT_TYPE_FLOAT32:
		return jit_value_create_float32_constant(func, const_value->type,
							 const_value->un.float32_value);

	case JIT_TYPE_FLOAT64:
		return jit_value_create_float64_constant(func, const_value->type,
							 const_value->un.float64_value);

	case JIT_TYPE_NFLOAT:
		return jit_value_create_nfloat_constant(func, const_value->type,
							const_value->un.nfloat_value);
	}
	return 0;
}