From c71d713fef3e61f96071cc8a872d8b2bdee92a8c Mon Sep 17 00:00:00 2001 From: Robert Pengelly Date: Thu, 21 May 2026 06:46:34 +0100 Subject: [PATCH] More syntax fixes --- parse.c | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/parse.c b/parse.c index 4580279..e348d59 100644 --- a/parse.c +++ b/parse.c @@ -6113,14 +6113,16 @@ static void switch_section (int sec) { return; } + if (state->syntax & ASM_SYNTAX_MASM) { + fprintf (state->ofp, "\n"); + } + if (sec == SECTION_TEXT) { - if (state->syntax & ASM_SYNTAX_MASM) { - fprintf (state->ofp, "\n%s\n", ".code"); - } else if (state->syntax & ASM_SYNTAX_NASM) { + if (state->syntax & ASM_SYNTAX_NASM) { fprintf (state->ofp, "section .text\n"); } else { - fprintf (state->ofp, "%s\n", ".text"); + fprintf (state->ofp, "%s\n", (state->syntax & ASM_SYNTAX_MASM ? ".code" : ".text")); } } else if (sec == SECTION_DATA) { @@ -20867,11 +20869,17 @@ static void emit_load_floating_const_bits_now (int size, int64_s v) { if (state->syntax & ASM_SYNTAX_MASM) { fprintf (state->ofp, ".data\n"); - fprintf (state->ofp, "LC%d_flt:\n", lab); - fprintf (state->ofp, " dd %lu\n", v.low & U32_MASK); if (size == (DATA_DOUBLE & 0x1f)) { - fprintf (state->ofp, " dd %lu\n", v.high & U32_MASK); + + if (v.high & U32_MASK) { + fprintf (state->ofp, "LC%d_flt dq %lu%lu\n", lab, v.high & U32_MASK, v.low & U32_MASK); + } else { + fprintf (state->ofp, "LC%d_flt dd %lu\n", lab, v.low & U32_MASK); + } + + } else { + fprintf (state->ofp, "LC%d_flt dd %lu\n", lab, v.low & U32_MASK); } fprintf (state->ofp, ".code\n"); @@ -33147,19 +33155,19 @@ static void emit_global_scalar (int64_s value, int size) { old_size = size; if (size == (DATA_CHAR & 0x1f)) { - fprintf (state->ofp, "db %ld", low & 0xFFUL); + fprintf (state->ofp, " db %ld", low & 0xFFUL); } else if (size == (DATA_SHORT & 0x1f)) { - fprintf (state->ofp, "dw %ld", low & 0xFFFFUL); + fprintf (state->ofp, " dw %ld", low & 0xFFFFUL); } else if (size == (DATA_LLONG & 0x1f) || size == (DATA_DOUBLE & 0x1f)) { if (high & U32_MASK) { - fprintf (state->ofp, "dq %lu", high & U32_MASK); + fprintf (state->ofp, " dq %lu%lu", high & U32_MASK, low & U32_MASK); + } else { + fprintf (state->ofp, " dq %lu", low & U32_MASK); } - - fprintf (state->ofp, "dq %lu", low & U32_MASK); } else { - fprintf (state->ofp, "dd %lu", low & U32_MASK); + fprintf (state->ofp, " dd %lu", low & U32_MASK); } } else { @@ -33241,7 +33249,7 @@ static void emit_global_address (const char *symbol, int size) { asm_symbol = asm_global_symbol_name (symbol); if (state->syntax & ASM_SYNTAX_MASM) { - fprintf (state->ofp, "dd offset %s", asm_symbol); + fprintf (state->ofp, " dd offset %s\n", asm_symbol); } else if (state->syntax & ASM_SYNTAX_NASM) { fprintf (state->ofp, " dd %s\n", asm_symbol); } else { @@ -33339,20 +33347,18 @@ static void emit_global_label (const char *name, int is_static) { if (state->syntax & ASM_SYNTAX_MASM) { - if (!is_static) { + if (current_section != SECTION_TEXT) { + fprintf (state->ofp, "\n"); + } - if (current_section != SECTION_TEXT) { - fprintf (state->ofp, "\n"); - } - + if (!is_static) { fprintf (state->ofp, "public %s\n", asm_name); - } if (current_section == SECTION_TEXT) { fprintf (state->ofp, "%s:\n", asm_name); } else { - fprintf (state->ofp, "%s ", asm_name); + fprintf (state->ofp, "%s", asm_name); } } else if (state->syntax & ASM_SYNTAX_NASM) { -- 2.34.1