mirror of
https://github.com/Decompollaborate/rabbitizer.git
synced 2025-02-15 21:41:47 +00:00
RegistersTracker#hasLoButNoHi
This commit is contained in:
parent
4a75e20c13
commit
42a2a33d7d
@ -29,6 +29,7 @@ bool RabbitizerRegistersTracker_getLuiOffsetForConstant(RabbitizerRegistersTrack
|
||||
void RabbitizerRegistersTracker_processConstant(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, uint32_t value, int offset);
|
||||
bool RabbitizerRegistersTracker_getLuiOffsetForLo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, int *dstOffset, bool *dstIsGp);
|
||||
void RabbitizerRegistersTracker_processLo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, uint32_t value, int offset);
|
||||
bool RabbitizerRegistersTracker_hasLoButNoHi(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr);
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -22,3 +22,4 @@ class RegistersTracker:
|
||||
def processConstant(self, instr: Instruction, value: int, offset: int) -> None: ...
|
||||
def getLuiOffsetForLo(self, instr: Instruction, instrOffset: int) -> tuple[int, bool, bool]: ...
|
||||
def processLo(self, instr: Instruction, value: int, offset: int) -> None: ...
|
||||
def hasLoButNoHi(self, instr: Instruction) -> bool: ...
|
||||
|
@ -195,6 +195,20 @@ static PyObject *rabbitizer_type_RegistersTracker_processLo(PyRabbitizerRegister
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
static PyObject *rabbitizer_type_RegistersTracker_hasLoButNoHi(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) {
|
||||
static char *kwlist[] = { "instr", NULL };
|
||||
PyRabbitizerInstruction *instr;
|
||||
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (RabbitizerRegistersTracker_hasLoButNoHi(&self->tracker, &instr->instr)) {
|
||||
Py_RETURN_TRUE;
|
||||
}
|
||||
Py_RETURN_FALSE;
|
||||
}
|
||||
|
||||
|
||||
#define METHOD_NO_ARGS(name, docs) { #name, (PyCFunction)rabbitizer_type_RegistersTracker_##name, METH_NOARGS, PyDoc_STR(docs) }
|
||||
#define METHOD_ARGS(name, docs) { #name, (PyCFunction)rabbitizer_type_RegistersTracker_##name, METH_VARARGS | METH_KEYWORDS, PyDoc_STR(docs) }
|
||||
@ -210,6 +224,7 @@ static PyMethodDef rabbitizer_type_RegistersTracker_methods[] = {
|
||||
METHOD_ARGS(processConstant, ""),
|
||||
METHOD_ARGS(getLuiOffsetForLo, ""),
|
||||
METHOD_ARGS(processLo, ""),
|
||||
METHOD_ARGS(hasLoButNoHi, ""),
|
||||
|
||||
{ 0 },
|
||||
};
|
||||
|
@ -333,6 +333,15 @@ void RabbitizerRegistersTracker_processLo(RabbitizerRegistersTracker *self, cons
|
||||
}
|
||||
}
|
||||
|
||||
bool RabbitizerRegistersTracker_hasLoButNoHi(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr) {
|
||||
RabbitizerTrackedRegisterState *state;
|
||||
|
||||
assert(instr != NULL);
|
||||
|
||||
state = &self->registers[instr->rs];
|
||||
return state->hasLoValue && !state->hasLuiValue;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
def _printDebugInfo_clearRegister(self, instr: rabbitizer.Instruction, reg: int, currentVram: int|None=None) -> None:
|
||||
|
Loading…
x
Reference in New Issue
Block a user