From ff5561ff7d699eb9e30e95f1e2cfd1e98e5a990d Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Wed, 29 Jun 2016 19:22:07 +0200 Subject: [PATCH] x86-64-asm: Accept expressions for .quad The x86-64 target has 64bit relocs, and hence can accept generic expressions for '.quad'. --- i386-asm.c | 2 +- tcc.h | 3 +++ tccasm.c | 9 +++++++++ tests/asmtest.S | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/i386-asm.c b/i386-asm.c index e532911..2ffa53b 100644 --- a/i386-asm.c +++ b/i386-asm.c @@ -433,7 +433,7 @@ ST_FUNC void gen_expr32(ExprValue *pe) } #ifdef TCC_TARGET_X86_64 -static void gen_expr64(ExprValue *pe) +ST_FUNC void gen_expr64(ExprValue *pe) { gen_addr64(pe->sym ? VT_SYM : 0, pe->sym, pe->v); } diff --git a/tcc.h b/tcc.h index 7279150..f1d577b 100644 --- a/tcc.h +++ b/tcc.h @@ -1526,6 +1526,9 @@ ST_FUNC int asm_int_expr(TCCState *s1); ST_FUNC int tcc_assemble(TCCState *s1, int do_preprocess); /* ------------ i386-asm.c ------------ */ ST_FUNC void gen_expr32(ExprValue *pe); +#ifdef TCC_TARGET_X86_64 +ST_FUNC void gen_expr64(ExprValue *pe); +#endif ST_FUNC void asm_opcode(TCCState *s1, int opcode); ST_FUNC void asm_compute_constraints(ASMOperand *operands, int nb_operands, int nb_outputs, const uint8_t *clobber_regs, int *pout_reg); ST_FUNC void subst_asm_operand(CString *add_str, SValue *sv, int modifier); diff --git a/tccasm.c b/tccasm.c index b3e9eb4..185f066 100644 --- a/tccasm.c +++ b/tccasm.c @@ -407,6 +407,10 @@ static void asm_parse_directive(TCCState *s1) ind += size; break; case TOK_ASMDIR_quad: +#ifdef TCC_TARGET_X86_64 + size = 8; + goto asm_data; +#else next(); for(;;) { uint64_t vl; @@ -433,6 +437,7 @@ static void asm_parse_directive(TCCState *s1) next(); } break; +#endif case TOK_ASMDIR_byte: size = 1; goto asm_data; @@ -451,6 +456,10 @@ static void asm_parse_directive(TCCState *s1) if (sec->sh_type != SHT_NOBITS) { if (size == 4) { gen_expr32(&e); +#ifdef TCC_TARGET_X86_64 + } else if (size == 8) { + gen_expr64(&e); +#endif } else { if (e.sym) expect("constant"); diff --git a/tests/asmtest.S b/tests/asmtest.S index eb6305f..652e50b 100644 --- a/tests/asmtest.S +++ b/tests/asmtest.S @@ -739,6 +739,7 @@ nop .long 145 + 2b .word 164, 0 .org 2b+32 + .quad 1b .popsection movd %esi, %mm1