free(insn);
return ret;
}
+ case IR_DATA_FLOAT:
+ {
+ struct load_op *insn;
+ uint32_t insn_len = sizeof(struct load_op)
+ + sizeof(struct literal_double);
+
+ insn = calloc(insn_len, 1);
+ if (!insn)
+ return -ENOMEM;
+ insn->op = FILTER_OP_LOAD_DOUBLE;
+ insn->reg = reg_sel(node);
+ if (insn->reg == REG_ERROR)
+ return -EINVAL;
+ *(double *) insn->data = node->u.load.u.flt;
+ ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
+ free(insn);
+ return ret;
+ }
case IR_DATA_FIELD_REF:
{
struct load_op *insn;
memcpy(insn->data, &ref_offset, sizeof(ref_offset));
if (insn->reg == REG_ERROR)
return -EINVAL;
- /* reloc_offset points to struct field_ref */
+ /* reloc_offset points to struct load_op */
reloc_offset = bytecode_get_len(&ctx->bytecode->b);
- reloc_offset += sizeof(struct load_op);
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
if (ret) {
free(insn);