From: Matthias Braun Date: Thu, 13 Nov 2008 13:36:42 +0000 (+0000) Subject: pass correct modes to 64bit lowerer X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=3294ed88964894e879810401479c52d456e6debe;p=cparser pass correct modes to 64bit lowerer [r23626] --- diff --git a/ast2firm.c b/ast2firm.c index 114ae46..355079c 100644 --- a/ast2firm.c +++ b/ast2firm.c @@ -145,7 +145,7 @@ static dbg_info *get_dbg_info(const source_position_t *pos) return (dbg_info*) pos; } -static ir_mode *_atomic_modes[ATOMIC_TYPE_LAST+1]; +static ir_mode *atomic_modes[ATOMIC_TYPE_LAST+1]; static ir_mode *mode_int, *mode_uint; @@ -193,13 +193,13 @@ static ir_mode *init_atomic_ir_mode(atomic_type_kind_t kind) static void init_atomic_modes(void) { for (int i = 0; i <= ATOMIC_TYPE_LAST; ++i) { - _atomic_modes[i] = init_atomic_ir_mode((atomic_type_kind_t) i); + atomic_modes[i] = init_atomic_ir_mode((atomic_type_kind_t) i); } - mode_int = _atomic_modes[ATOMIC_TYPE_INT]; - mode_uint = _atomic_modes[ATOMIC_TYPE_UINT]; + mode_int = atomic_modes[ATOMIC_TYPE_INT]; + mode_uint = atomic_modes[ATOMIC_TYPE_UINT]; /* there's no real void type in firm */ - _atomic_modes[ATOMIC_TYPE_VOID] = mode_int; + atomic_modes[ATOMIC_TYPE_VOID] = mode_int; /* initialize pointer modes */ char name[64]; @@ -214,14 +214,20 @@ static void init_atomic_modes(void) ir_mode *ptr_mode = new_ir_mode(name, sort, bit_size, is_signed, arithmetic, modulo_shift); - set_reference_mode_signed_eq(ptr_mode, _atomic_modes[get_intptr_kind()]); - set_reference_mode_unsigned_eq(ptr_mode, _atomic_modes[get_uintptr_kind()]); + set_reference_mode_signed_eq(ptr_mode, atomic_modes[get_intptr_kind()]); + set_reference_mode_unsigned_eq(ptr_mode, atomic_modes[get_uintptr_kind()]); /* Hmm, pointers should be machine size */ set_modeP_data(ptr_mode); set_modeP_code(ptr_mode); } +ir_mode *get_atomic_mode(atomic_type_kind_t kind) +{ + assert(kind <= ATOMIC_TYPE_LAST); + return atomic_modes[kind]; +} + static unsigned get_compound_type_size(compound_type_t *type) { ir_type *irtype = get_ir_type((type_t*) type); @@ -312,7 +318,7 @@ static unsigned count_parameters(const function_type_t *function_type) static ir_type *create_atomic_type(const atomic_type_t *type) { atomic_type_kind_t kind = type->akind; - ir_mode *mode = _atomic_modes[kind]; + ir_mode *mode = atomic_modes[kind]; ident *id = get_mode_ident(mode); ir_type *irtype = new_type_primitive(id, mode); @@ -327,7 +333,7 @@ static ir_type *create_atomic_type(const atomic_type_t *type) static ir_type *create_complex_type(const complex_type_t *type) { atomic_type_kind_t kind = type->akind; - ir_mode *mode = _atomic_modes[kind]; + ir_mode *mode = atomic_modes[kind]; ident *id = get_mode_ident(mode); (void) id; @@ -342,7 +348,7 @@ static ir_type *create_complex_type(const complex_type_t *type) static ir_type *create_imaginary_type(const imaginary_type_t *type) { atomic_type_kind_t kind = type->akind; - ir_mode *mode = _atomic_modes[kind]; + ir_mode *mode = atomic_modes[kind]; ident *id = get_mode_ident(mode); ir_type *irtype = new_type_primitive(id, mode); diff --git a/ast2firm.h b/ast2firm.h index a9ed846..0112cf8 100644 --- a/ast2firm.h +++ b/ast2firm.h @@ -20,11 +20,15 @@ #ifndef AST2FIRM_H #define AST2FIRM_H +#include #include "ast.h" +#include "type.h" void translation_unit_to_firm(translation_unit_t *unit); void init_ast2firm(void); void exit_ast2firm(void); +ir_mode *get_atomic_mode(atomic_type_kind_t kind); + #endif diff --git a/driver/firm_opt.c b/driver/firm_opt.c index 665dd5b..eb75247 100644 --- a/driver/firm_opt.c +++ b/driver/firm_opt.c @@ -19,6 +19,7 @@ #include "firm_codegen.h" #include "firm_cmdline.h" #include "firm_timing.h" +#include "ast2firm.h" #ifdef _WIN32 #define snprintf _snprintf @@ -801,21 +802,14 @@ static void do_firm_lowering(const char *input_filename) { int i; - /* do class lowering and vtbl creation */ -// lower_classes_to_struct("vtbl", "m"); - -#if 0 - timer_push(TV_LOWER); - lower_highlevel(); - timer_pop(); -#endif - if (firm_opt.lower_ll) { lwrdw_param_t init = { 1, 1, - mode_Ls, mode_Lu, - mode_Is, mode_Iu, + get_atomic_mode(ATOMIC_TYPE_LONGLONG), + get_atomic_mode(ATOMIC_TYPE_ULONGLONG), + get_atomic_mode(ATOMIC_TYPE_INT), + get_atomic_mode(ATOMIC_TYPE_UINT), def_create_intrinsic_fkt, NULL };