c: Fix loading of float params
authorDavid Schleef <ds@schleef.org>
Fri, 27 Aug 2010 00:58:42 +0000 (17:58 -0700)
committerDavid Schleef <ds@schleef.org>
Fri, 27 Aug 2010 00:58:42 +0000 (17:58 -0700)
Float params are loaded from orc_union32 pointers into orc_union32
temporaries, so it's important to not to a float->int conversion
in there.

orc/orcprogram-c.c

index c57b682..e2dbed3 100644 (file)
@@ -407,7 +407,7 @@ c_get_name_int (char *name, OrcCompiler *p, OrcInstruction *insn, int var)
               var - ORC_VAR_P1 + p->program->n_src_vars);
           break;
         case ORC_PARAM_TYPE_FLOAT:
-          sprintf(name,"((orc_union32 *)(ex->src_ptrs[%d]))->f",
+          sprintf(name,"((orc_union32 *)(ex->src_ptrs[%d]))->i",
               var - ORC_VAR_P1 + p->program->n_src_vars);
           break;
         case ORC_PARAM_TYPE_INT64:
@@ -415,7 +415,7 @@ c_get_name_int (char *name, OrcCompiler *p, OrcInstruction *insn, int var)
               var - ORC_VAR_P1 + p->program->n_src_vars);
           break;
         case ORC_PARAM_TYPE_DOUBLE:
-          sprintf(name,"((orc_union64 *)(ex->src_ptrs[%d]))->f",
+          sprintf(name,"((orc_union64 *)(ex->src_ptrs[%d]))->i",
               var - ORC_VAR_P1 + p->program->n_src_vars);
           break;
         default:
@@ -427,7 +427,7 @@ c_get_name_int (char *name, OrcCompiler *p, OrcInstruction *insn, int var)
           sprintf(name,"ex->params[%d]", var);
           break;
         case ORC_PARAM_TYPE_FLOAT:
-          sprintf(name,"((orc_union32 *)(ex->params+%d))->f", var);
+          sprintf(name,"((orc_union32 *)(ex->params+%d))->i", var);
           break;
         case ORC_PARAM_TYPE_INT64:
           /* FIXME */
@@ -435,7 +435,7 @@ c_get_name_int (char *name, OrcCompiler *p, OrcInstruction *insn, int var)
           break;
         case ORC_PARAM_TYPE_DOUBLE:
           /* FIXME */
-          sprintf(name,"((orc_union32 *)(ex->params+%d))->f", var);
+          sprintf(name,"((orc_union32 *)(ex->params+%d))->i", var);
           break;
         default:
           ORC_ASSERT(0);