From 49fd2386e6e66e2dd22abc7293726dec8a4ebde8 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Wed, 2 Jan 2008 00:22:18 +0000 Subject: [PATCH] added GNU_FLAVOUR_YASM to support the YASM assembler [r17127] --- ir/be/begnuas.c | 19 ++++++++++++++++--- ir/be/begnuas.h | 3 ++- ir/be/ia32/bearch_ia32.c | 1 + ir/be/ia32/ia32_emitter.c | 5 +++++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/ir/be/begnuas.c b/ir/be/begnuas.c index 208603d0c..33e5389f5 100644 --- a/ir/be/begnuas.c +++ b/ir/be/begnuas.c @@ -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)); } diff --git a/ir/be/begnuas.h b/ir/be/begnuas.h index 8f350fa93..3ea670ab2 100644 --- a/ir/be/begnuas.h +++ b/ir/be/begnuas.h @@ -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. */ diff --git a/ir/be/ia32/bearch_ia32.c b/ir/be/ia32/bearch_ia32.c index e2288b507..a4a2dc10f 100644 --- a/ir/be/ia32/bearch_ia32.c +++ b/ir/be/ia32/bearch_ia32.c @@ -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 } }; diff --git a/ir/be/ia32/ia32_emitter.c b/ir/be/ia32/ia32_emitter.c index 7cdb81840..7348e4ac3 100644 --- a/ir/be/ia32/ia32_emitter.c +++ b/ir/be/ia32/ia32_emitter.c @@ -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; } -- 2.20.1