added GNU_FLAVOUR_YASM to support the YASM assembler
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Wed, 2 Jan 2008 00:22:18 +0000 (00:22 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Wed, 2 Jan 2008 00:22:18 +0000 (00:22 +0000)
[r17127]

ir/be/begnuas.c
ir/be/begnuas.h
ir/be/ia32/bearch_ia32.c
ir/be/ia32/ia32_emitter.c

index 208603d..33e5389 100644 (file)
@@ -76,6 +76,14 @@ static const char *get_section_name(be_gas_section_t section) {
                        ".section\t.bss",
                        ".section\t.tbss,\"awT\",@nobits",
                        ".section\t.ctors,\"aw\",@progbits"
+               },
+               {
+                       ".section\t.text",
+                               ".section\t.data",
+                               ".section\t.rodata",
+                               ".section\t.bss",
+                               ".section\t.tbss,\"awT\",@nobits",
+                               ".section\t.ctors,\"aw\",@progbits"
                }
        };
 
@@ -676,13 +684,18 @@ static void dump_global(be_gas_decl_env_t *env, ir_entity *ent, int emit_commons
        }
 
        if (variability == variability_uninitialized) {
-               if(emit_as_common) {
-                       if (be_gas_flavour == GAS_FLAVOUR_NORMAL)
+               if (emit_as_common) {
+                       switch (be_gas_flavour) {
+                       case GAS_FLAVOUR_NORMAL:
+                       case GAS_FLAVOUR_YASM:
                                obstack_printf(obst, "\t.comm %s,%u,%u\n",
                                        ld_name, get_type_size_bytes(type), align);
-                       else
+                               break;
+                       case GAS_FLAVOUR_MINGW:
                                obstack_printf(obst, "\t.comm %s,%u # %u\n",
                                        ld_name, get_type_size_bytes(type), align);
+                               break;
+                       }
                } else {
                        obstack_printf(obst, "\t.zero %u\n", get_type_size_bytes(type));
                }
index 8f350fa..3ea670a 100644 (file)
@@ -49,7 +49,8 @@ typedef enum section_t {
 typedef enum asm_flavour_t {
        GAS_FLAVOUR_NORMAL = 0,  /**< normal gas (ELF) */
        GAS_FLAVOUR_MINGW  = 1,  /**< MinGW variant (no-ELF) */
-       GAS_FLAVOUR_MAX    = 2
+       GAS_FLAVOUR_YASM   = 2,  /**< YASM GNU parser */
+       GAS_FLAVOUR_MAX    = 3
 } be_gas_flavour_t;
 
 /** The variable where the GAS dialect is stored. */
index e2288b5..a4a2dc1 100644 (file)
@@ -2085,6 +2085,7 @@ static const backend_params *ia32_get_libfirm_params(void) {
 static const lc_opt_enum_int_items_t gas_items[] = {
        { "normal",  GAS_FLAVOUR_NORMAL },
        { "mingw",   GAS_FLAVOUR_MINGW  },
+       { "yasm",    GAS_FLAVOUR_YASM   },
        { NULL,      0 }
 };
 
index 7cdb818..7348e4a 100644 (file)
@@ -351,6 +351,8 @@ void ia32_emit_function_object(const char *name)
                be_emit_cstring(";\t.scl\t2;\t.type\t32;\t.endef\n");
                be_emit_write_line();
                break;
+       case GAS_FLAVOUR_YASM:
+               break;
        default:
                break;
        }
@@ -368,6 +370,9 @@ void ia32_emit_function_size(const char *name)
                be_emit_char('\n');
                be_emit_write_line();
                break;
+       case GAS_FLAVOUR_MINGW:
+       case GAS_FLAVOUR_YASM:
+               break;
        default:
                break;
        }