!ir_instr_op(in, 1, func, false))
{
delete in;
+ delete out;
return nullptr;
}
self->m_instr.push_back(in);
stmt.opcode = INSTR_BITOR;
stmt.o1.s1 = instr->_m_ops[1]->codeAddress();
stmt.o2.s1 = instr->_m_ops[2]->codeAddress();
- stmt.o3.s1 = instr->_m_ops[0]->codeAddress();
+ stmt.o3.s1 = func->m_owner->m_vinstr_temp[1]->codeAddress();
code_push_statement(code, &stmt, instr->m_context);
stmt.opcode = INSTR_BITAND;
stmt.o1.s1 = instr->_m_ops[1]->codeAddress();
stmt.o3.s1 = func->m_owner->m_vinstr_temp[0]->codeAddress();
code_push_statement(code, &stmt, instr->m_context);
stmt.opcode = INSTR_SUB_F;
- stmt.o1.s1 = instr->_m_ops[0]->codeAddress();
+ stmt.o1.s1 = func->m_owner->m_vinstr_temp[1]->codeAddress();
stmt.o2.s1 = func->m_owner->m_vinstr_temp[0]->codeAddress();
stmt.o3.s1 = instr->_m_ops[0]->codeAddress();
code_push_statement(code, &stmt, instr->m_context);
stmt.opcode = INSTR_BITOR;
stmt.o1.s1 = instr->_m_ops[1]->codeAddress() + j;
stmt.o2.s1 = instr->_m_ops[2]->codeAddress() + j;
- stmt.o3.s1 = instr->_m_ops[0]->codeAddress() + j;
+ stmt.o3.s1 = func->m_owner->m_vinstr_temp[1]->codeAddress() + j;
code_push_statement(code, &stmt, instr->m_context);
stmt.opcode = INSTR_BITAND;
stmt.o1.s1 = instr->_m_ops[1]->codeAddress() + j;
code_push_statement(code, &stmt, instr->m_context);
}
stmt.opcode = INSTR_SUB_V;
- stmt.o1.s1 = instr->_m_ops[0]->codeAddress();
+ stmt.o1.s1 = func->m_owner->m_vinstr_temp[1]->codeAddress();
stmt.o2.s1 = func->m_owner->m_vinstr_temp[0]->codeAddress();
stmt.o3.s1 = instr->_m_ops[0]->codeAddress();
code_push_statement(code, &stmt, instr->m_context);
stmt.opcode = INSTR_BITOR;
stmt.o1.s1 = instr->_m_ops[1]->codeAddress() + j;
stmt.o2.s1 = instr->_m_ops[2]->codeAddress();
- stmt.o3.s1 = instr->_m_ops[0]->codeAddress() + j;
+ stmt.o3.s1 = func->m_owner->m_vinstr_temp[1]->codeAddress() + j;
code_push_statement(code, &stmt, instr->m_context);
stmt.opcode = INSTR_BITAND;
stmt.o1.s1 = instr->_m_ops[1]->codeAddress() + j;
code_push_statement(code, &stmt, instr->m_context);
}
stmt.opcode = INSTR_SUB_V;
- stmt.o1.s1 = instr->_m_ops[0]->codeAddress();
+ stmt.o1.s1 = func->m_owner->m_vinstr_temp[1]->codeAddress();
stmt.o2.s1 = func->m_owner->m_vinstr_temp[0]->codeAddress();
stmt.o3.s1 = instr->_m_ops[0]->codeAddress();
code_push_statement(code, &stmt, instr->m_context);
for (j = 0; j < 3; ++j) {
stmt.o1.s1 = instr->_m_ops[1]->codeAddress() + (j + 1) % 3;
stmt.o2.s1 = instr->_m_ops[2]->codeAddress() + (j + 2) % 3;
- stmt.o3.s1 = instr->_m_ops[0]->codeAddress() + j;
+ stmt.o3.s1 = func->m_owner->m_vinstr_temp[1]->codeAddress() + j;
code_push_statement(code, &stmt, instr->m_context);
stmt.o1.s1 = instr->_m_ops[1]->codeAddress() + (j + 2) % 3;
stmt.o2.s1 = instr->_m_ops[2]->codeAddress() + (j + 1) % 3;
code_push_statement(code, &stmt, instr->m_context);
}
stmt.opcode = INSTR_SUB_V;
- stmt.o1.s1 = instr->_m_ops[0]->codeAddress();
+ stmt.o1.s1 = func->m_owner->m_vinstr_temp[1]->codeAddress();
stmt.o2.s1 = func->m_owner->m_vinstr_temp[0]->codeAddress();
stmt.o3.s1 = instr->_m_ops[0]->codeAddress();
code_push_statement(code, &stmt, instr->m_context);
oprintf("fn:%s", m_name.c_str());
break;
case TYPE_FLOAT:
- oprintf("%g", m_constval.vfloat);
+ // %.9g is lossless for IEEE single precision.
+ oprintf("%.9g", m_constval.vfloat);
break;
case TYPE_VECTOR:
- oprintf("'%g %g %g'",
+ oprintf("'%.9g %.9g %.9g'",
m_constval.vvec.x,
m_constval.vvec.y,
m_constval.vvec.z);