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; }
/*@ * @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; }