Implement handling of 64 bit constants in the C backend
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Sun, 5 Sep 2010 12:51:32 +0000 (14:51 +0200)
committerDavid Schleef <ds@schleef.org>
Mon, 6 Sep 2010 07:06:50 +0000 (00:06 -0700)
This uses %lx and %ld to print 64 bit integers but on 32
bit architectures something like %llx and %lld would be
needed.

orc/orcprogram-c.c

index f084b75..e0053ed 100644 (file)
@@ -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");
   }