Mostly complete tracing. Probably a lot of bugs.
This commit is contained in:
@@ -649,6 +649,28 @@ void HIRBuilder::SourceOffset(uint64_t offset) {
|
||||
i->src2.value = i->src3.value = NULL;
|
||||
}
|
||||
|
||||
void HIRBuilder::TraceSource(uint64_t offset) {
|
||||
Instr* i = AppendInstr(OPCODE_TRACE_SOURCE_info, 100 | (100 << 8));
|
||||
i->src1.offset = offset;
|
||||
i->set_src2(LoadZero(INT64_TYPE));
|
||||
i->set_src3(LoadZero(INT64_TYPE));
|
||||
}
|
||||
|
||||
void HIRBuilder::TraceSource(uint64_t offset, uint8_t index, Value* value) {
|
||||
Instr* i = AppendInstr(OPCODE_TRACE_SOURCE_info, index | (100 << 8));
|
||||
i->src1.offset = offset;
|
||||
i->set_src2(value);
|
||||
i->set_src3(LoadZero(INT64_TYPE));
|
||||
}
|
||||
|
||||
void HIRBuilder::TraceSource(uint64_t offset, uint8_t index_0, Value* value_0,
|
||||
uint8_t index_1, Value* value_1) {
|
||||
Instr* i = AppendInstr(OPCODE_TRACE_SOURCE_info, index_0 | (index_1 << 8));
|
||||
i->src1.offset = offset;
|
||||
i->set_src2(value_0);
|
||||
i->set_src3(value_1);
|
||||
}
|
||||
|
||||
void HIRBuilder::DebugBreak() {
|
||||
Instr* i = AppendInstr(OPCODE_DEBUG_BREAK_info, 0);
|
||||
i->src1.value = i->src2.value = i->src3.value = NULL;
|
||||
@@ -1743,11 +1765,13 @@ Value* HIRBuilder::RotateLeft(Value* value1, Value* value2) {
|
||||
return i->dest;
|
||||
}
|
||||
|
||||
Value* HIRBuilder::VectorRotateLeft(Value* value1, Value* value2, TypeName part_type) {
|
||||
Value* HIRBuilder::VectorRotateLeft(Value* value1, Value* value2,
|
||||
TypeName part_type) {
|
||||
ASSERT_VECTOR_TYPE(value1);
|
||||
ASSERT_VECTOR_TYPE(value2);
|
||||
|
||||
Instr* i = AppendInstr(OPCODE_VECTOR_ROTATE_LEFT_info, part_type, AllocValue(value1->type));
|
||||
Instr* i = AppendInstr(OPCODE_VECTOR_ROTATE_LEFT_info, part_type,
|
||||
AllocValue(value1->type));
|
||||
i->set_src1(value1);
|
||||
i->set_src2(value2);
|
||||
i->src3.value = NULL;
|
||||
|
||||
@@ -71,6 +71,10 @@ class HIRBuilder {
|
||||
void Nop();
|
||||
|
||||
void SourceOffset(uint64_t offset);
|
||||
void TraceSource(uint64_t offset);
|
||||
void TraceSource(uint64_t offset, uint8_t index, Value* value);
|
||||
void TraceSource(uint64_t offset, uint8_t index_0, Value* value_0,
|
||||
uint8_t index_1, Value* value_1);
|
||||
|
||||
// trace info/etc
|
||||
void DebugBreak();
|
||||
|
||||
@@ -77,6 +77,7 @@ enum Opcode {
|
||||
OPCODE_COMMENT,
|
||||
OPCODE_NOP,
|
||||
OPCODE_SOURCE_OFFSET,
|
||||
OPCODE_TRACE_SOURCE,
|
||||
OPCODE_DEBUG_BREAK,
|
||||
OPCODE_DEBUG_BREAK_TRUE,
|
||||
OPCODE_TRAP,
|
||||
@@ -207,6 +208,8 @@ enum OpcodeSignature {
|
||||
OPCODE_SIG_X_O = (OPCODE_SIG_TYPE_X) | (OPCODE_SIG_TYPE_O << 3),
|
||||
OPCODE_SIG_X_O_V =
|
||||
(OPCODE_SIG_TYPE_X) | (OPCODE_SIG_TYPE_O << 3) | (OPCODE_SIG_TYPE_V << 6),
|
||||
OPCODE_SIG_X_O_V_V = (OPCODE_SIG_TYPE_X) | (OPCODE_SIG_TYPE_O << 3) |
|
||||
(OPCODE_SIG_TYPE_V << 6) | (OPCODE_SIG_TYPE_V << 9),
|
||||
OPCODE_SIG_X_S = (OPCODE_SIG_TYPE_X) | (OPCODE_SIG_TYPE_S << 3),
|
||||
OPCODE_SIG_X_V = (OPCODE_SIG_TYPE_X) | (OPCODE_SIG_TYPE_V << 3),
|
||||
OPCODE_SIG_X_V_L =
|
||||
|
||||
@@ -26,6 +26,12 @@ DEFINE_OPCODE(
|
||||
OPCODE_SIG_X_O,
|
||||
OPCODE_FLAG_IGNORE | OPCODE_FLAG_HIDE)
|
||||
|
||||
DEFINE_OPCODE(
|
||||
OPCODE_TRACE_SOURCE,
|
||||
"trace_source",
|
||||
OPCODE_SIG_X_O_V_V,
|
||||
OPCODE_FLAG_IGNORE | OPCODE_FLAG_HIDE)
|
||||
|
||||
DEFINE_OPCODE(
|
||||
OPCODE_DEBUG_BREAK,
|
||||
"debug_break",
|
||||
|
||||
Reference in New Issue
Block a user