pass correct modes to 64bit lowerer
authorMatthias Braun <matze@braunis.de>
Thu, 13 Nov 2008 13:36:42 +0000 (13:36 +0000)
committerMatthias Braun <matze@braunis.de>
Thu, 13 Nov 2008 13:36:42 +0000 (13:36 +0000)
[r23626]

ast2firm.c
ast2firm.h
driver/firm_opt.c

index 114ae46..355079c 100644 (file)
@@ -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);
 
index a9ed846..0112cf8 100644 (file)
 #ifndef AST2FIRM_H
 #define AST2FIRM_H
 
+#include <libfirm/firm_types.h>
 #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
index 665dd5b..eb75247 100644 (file)
@@ -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
     };