return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn));
}
return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn));
}
strcpy(insn->data, node->u.load.u.string);
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
strcpy(insn->data, node->u.load.u.string);
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
*(int64_t *) insn->data = node->u.load.u.num;
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
*(int64_t *) insn->data = node->u.load.u.num;
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
*(double *) insn->data = node->u.load.u.flt;
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
*(double *) insn->data = node->u.load.u.flt;
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
free(insn);
ref_offset.offset = (uint16_t) -1U;
memcpy(insn->data, &ref_offset, sizeof(ref_offset));
ref_offset.offset = (uint16_t) -1U;
memcpy(insn->data, &ref_offset, sizeof(ref_offset));
/* reloc_offset points to struct load_op */
reloc_offset = bytecode_get_len(&ctx->bytecode->b);
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
/* reloc_offset points to struct load_op */
reloc_offset = bytecode_get_len(&ctx->bytecode->b);
ret = bytecode_push(&ctx->bytecode, insn, 1, insn_len);
return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn));
case AST_UNARY_NOT:
insn.op = FILTER_OP_UNARY_NOT;
return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn));
case AST_UNARY_NOT:
insn.op = FILTER_OP_UNARY_NOT;
return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn));
}
}
return bytecode_push(&ctx->bytecode, &insn, 1, sizeof(insn));
}
}
- cast_insn.op = FILTER_OP_CAST_TO_S64;
- cast_insn.reg = REG_R0;
+ if (node->u.binary.left->data_type == IR_DATA_FIELD_REF) {
+ cast_insn.op = FILTER_OP_CAST_TO_S64;
+ } else {
+ cast_insn.op = FILTER_OP_CAST_DOUBLE_TO_S64;
+ }
- cast_insn.op = FILTER_OP_CAST_TO_S64;
- cast_insn.reg = REG_R0;
+ if (node->u.binary.right->data_type == IR_DATA_FIELD_REF) {
+ cast_insn.op = FILTER_OP_CAST_TO_S64;
+ } else {
+ cast_insn.op = FILTER_OP_CAST_DOUBLE_TO_S64;
+ }