diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-09-05 14:51:32 +0200 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2010-09-06 00:06:50 -0700 |
commit | 54d33bbc53a3675c85a8bcdff0e902c6e4857e60 (patch) | |
tree | 2541959baf61e4b8c912ec605d65daec3e3484bb /orc/orcprogram-c.c | |
parent | 05876857216b1142f4dcd01fbbc0eae7fe31bafa (diff) | |
download | orc-54d33bbc53a3675c85a8bcdff0e902c6e4857e60.tar.gz |
Implement handling of 64 bit constants in the C backend
This uses %lx and %ld to print 64 bit integers but on 32
bit architectures something like %llx and %lld would be
needed.
Diffstat (limited to 'orc/orcprogram-c.c')
-rw-r--r-- | orc/orcprogram-c.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/orc/orcprogram-c.c b/orc/orcprogram-c.c index f084b75..e0053ed 100644 --- a/orc/orcprogram-c.c +++ b/orc/orcprogram-c.c @@ -793,10 +793,16 @@ c_rule_loadpX (OrcCompiler *p, void *user, OrcInstruction *insn) } } } else if (p->vars[insn->src_args[0]].vartype == ORC_VAR_TYPE_CONST) { - ORC_ASM_CODE(p," %s = 0x%08x; /* %d or %gf */\n", dest, - (unsigned int)p->vars[insn->src_args[0]].value.i, - (int)p->vars[insn->src_args[0]].value.i, - p->vars[insn->src_args[0]].value.f); + if (p->vars[insn->src_args[0]].size <= 4) + ORC_ASM_CODE(p," %s = 0x%08x; /* %d or %gf */\n", dest, + (unsigned int)p->vars[insn->src_args[0]].value.i, + (int)p->vars[insn->src_args[0]].value.i, + p->vars[insn->src_args[0]].value.f); + else + ORC_ASM_CODE(p," %s = 0x%016lx; /* %ld or %lff */\n", dest, + p->vars[insn->src_args[0]].value.i, + p->vars[insn->src_args[0]].value.i, + p->vars[insn->src_args[0]].value.f); } else { ORC_COMPILER_ERROR(p, "expected param or constant"); } |