summaryrefslogtreecommitdiff
path: root/orc/orcprogram-c.c
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2010-09-05 14:51:32 +0200
committerDavid Schleef <ds@schleef.org>2010-09-06 00:06:50 -0700
commit54d33bbc53a3675c85a8bcdff0e902c6e4857e60 (patch)
tree2541959baf61e4b8c912ec605d65daec3e3484bb /orc/orcprogram-c.c
parent05876857216b1142f4dcd01fbbc0eae7fe31bafa (diff)
downloadorc-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.c14
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");
}