aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--i386-asm.c2
-rw-r--r--tcc.h3
-rw-r--r--tccasm.c9
-rw-r--r--tests/asmtest.S1
4 files changed, 14 insertions, 1 deletions
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