Exemplo n.º 1
0
ir_tarval *fold_builtin_nan(call_expression_t const *const call,
                            type_t const *const function_type)
{
	ir_tarval *payload = NULL;
	call_argument_t *const argument = call->arguments;
	if (argument != NULL && argument->expression->kind == EXPR_STRING_LITERAL) {
		const char *str = argument->expression->string_literal.value->begin;
		/* sanity checking */
		if (is_valid_strold_input(str)) {
			ir_mode *payload_mode = atomic_modes[ATOMIC_TYPE_ULONGLONG];
			payload = new_tarval_from_str(str, strlen(str), payload_mode);
		}
	}

	type_t  *type = function_type->function.return_type;
	ir_mode *mode = get_ir_mode_storage(type);
	return new_tarval_nan(mode, false, payload);
}
Exemplo n.º 2
0
int main(void)
{
	init_ident();
	init_tarval_1();
	init_irprog_1();
	init_mode();
	init_tarval_2();

	double d_nan = 0.0/0.0;
	assert (d_nan != d_nan);

	d_nan = new_nan(1234);
	assert (d_nan != d_nan);
	assert (nan_payload(d_nan) == 1234);

	d_nan *= 2;
	assert (d_nan != d_nan);

	ir_tarval* tv_nan = new_tarval_from_double(d_nan, mode_D);
	assert (tarval_is_nan(tv_nan));
	d_nan = get_tarval_double(tv_nan);
	assert (d_nan != d_nan);
	assert (nan_payload(d_nan) == 1234);

	tv_nan = new_tarval_nan(mode_D, false, NULL);
	assert (tarval_is_nan(tv_nan));
	d_nan = get_tarval_double(tv_nan);
	assert (d_nan != d_nan);

	d_nan = new_nan(0);
	assert (nan_payload(d_nan) == 0);
	assert (d_nan != d_nan);
	tv_nan = new_tarval_from_double(d_nan, mode_D);
	assert (tarval_is_nan(tv_nan));
	d_nan = get_tarval_double(tv_nan);
	assert (d_nan != d_nan);
	assert (nan_payload(d_nan) == 0);

	finish_tarval();
	finish_mode();
	finish_ident();
	return 0;
}