30 lines
864 B
C
30 lines
864 B
C
|
|
#include "instruction.h"
|
||
|
|
|
||
|
|
char* gravityOpcodeToCStr(GravityOpcode opcode) {
|
||
|
|
switch (opcode) {
|
||
|
|
case GravityOpcodeAlloc: return "alloc";
|
||
|
|
case GravityOpcodeStore: return "store";
|
||
|
|
case GravityOpcodeLoad: return "load";
|
||
|
|
default: return "fixme";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
char* gravityInstructionToCStr(GravityInstruction inst) {
|
||
|
|
StringBuffer buff;
|
||
|
|
initStringBuff(&buff);
|
||
|
|
|
||
|
|
if (inst.result != NULL) {
|
||
|
|
sbAppend(&buff, "%s = ", gravityValueToCStr(inst.result));
|
||
|
|
}
|
||
|
|
|
||
|
|
sbAppend(&buff, "%s ", gravityOpcodeToCStr(inst.opcode));
|
||
|
|
for (unsigned int i = 0; i < inst.numOperands; i++) {
|
||
|
|
if (i < inst.numOperands - 1) {
|
||
|
|
sbAppend(&buff, "%s, ", gravityValueToCStr(inst.operands[i]));
|
||
|
|
} else {
|
||
|
|
sbAppend(&buff, "%s", gravityValueToCStr(inst.operands[i]));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return buff.data;
|
||
|
|
}
|