From 85501c9cb6a97b8b1c1fea0705756a9f347e6402 Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Thu, 2 Oct 2008 07:57:02 +0000 Subject: [PATCH] Parse __builtin_inf{,f,l} and correct __builtin_nand to __builtin_nanl. [r22406] --- ast.c | 5 ++++- ast2firm.c | 8 ++++++-- parser.c | 18 +++++++++++++++--- tokens.inc | 7 +++++-- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/ast.c b/ast.c index 4daf4f6..6b0542e 100644 --- a/ast.c +++ b/ast.c @@ -1672,9 +1672,12 @@ static bool is_builtin_const_call(const expression_t *expression) switch (symbol->ID) { case T___builtin_huge_val: + case T___builtin_inf: + case T___builtin_inff: + case T___builtin_infl: case T___builtin_nan: case T___builtin_nanf: - case T___builtin_nand: + case T___builtin_nanl: return true; } diff --git a/ast2firm.c b/ast2firm.c index eb68d0f..d237cfb 100644 --- a/ast2firm.c +++ b/ast2firm.c @@ -1578,7 +1578,11 @@ static ir_node *process_builtin_call(const call_expression_t *call) return res; } - case T___builtin_huge_val: { + + case T___builtin_huge_val: + case T___builtin_inf: + case T___builtin_inff: + case T___builtin_infl: { ir_mode *mode = get_ir_mode(function_type->function.return_type); tarval *tv = get_mode_infinite(mode); ir_node *res = new_d_Const(dbgi, mode, tv); @@ -1586,7 +1590,7 @@ static ir_node *process_builtin_call(const call_expression_t *call) } case T___builtin_nan: case T___builtin_nanf: - case T___builtin_nand: { + case T___builtin_nanl: { /* Ignore string for now... */ assert(is_type_function(function_type)); ir_mode *mode = get_ir_mode(function_type->function.return_type); diff --git a/parser.c b/parser.c index 452095e..6c8e3a3 100644 --- a/parser.c +++ b/parser.c @@ -6005,11 +6005,17 @@ static type_t *get_builtin_symbol_type(symbol_t *symbol) return make_function_1_type(type_void_ptr, type_size_t); case T___builtin_huge_val: return make_function_0_type(type_double); + case T___builtin_inf: + return make_function_0_type(type_double); + case T___builtin_inff: + return make_function_0_type(type_float); + case T___builtin_infl: + return make_function_0_type(type_long_double); case T___builtin_nan: return make_function_1_type(type_double, type_char_ptr); case T___builtin_nanf: return make_function_1_type(type_float, type_char_ptr); - case T___builtin_nand: + case T___builtin_nanl: return make_function_1_type(type_long_double, type_char_ptr); case T___builtin_va_end: return make_function_1_type(type_void, type_valist); @@ -6837,9 +6843,12 @@ static expression_t *parse_primary_expression(void) case T___builtin_va_arg: return parse_va_arg(); case T___builtin_expect: case T___builtin_alloca: + case T___builtin_inf: + case T___builtin_inff: + case T___builtin_infl: case T___builtin_nan: - case T___builtin_nand: case T___builtin_nanf: + case T___builtin_nanl: case T___builtin_huge_val: case T___builtin_va_end: return parse_builtin_symbol(); case T___builtin_isgreater: @@ -9697,9 +9706,12 @@ expression_statment: case T___builtin_islessequal: case T___builtin_islessgreater: case T___builtin_isunordered: + case T___builtin_inf: + case T___builtin_inff: + case T___builtin_infl: case T___builtin_nan: - case T___builtin_nand: case T___builtin_nanf: + case T___builtin_nanl: case T___builtin_offsetof: case T___builtin_prefetch: case T___builtin_va_arg: diff --git a/tokens.inc b/tokens.inc index 2f9cef9..d6d6483 100644 --- a/tokens.inc +++ b/tokens.inc @@ -55,9 +55,12 @@ S(_ALL, __builtin_offsetof) S(_ALL, __builtin_va_arg) S(_ALL, __builtin_va_end) S(_ALL, __builtin_alloca) -S(_ALL, __builtin_nanf) +S(_ALL, __builtin_inf) +S(_ALL, __builtin_inff) +S(_ALL, __builtin_infl) S(_ALL, __builtin_nan) -S(_ALL, __builtin_nand) +S(_ALL, __builtin_nanf) +S(_ALL, __builtin_nanl) S(_ALL, __builtin_isgreater) S(_ALL, __builtin_isgreaterequal) S(_ALL, __builtin_isless) -- 2.20.1