forked from OSchip/llvm-project
Filled in a few new APIs for the enhanced
disassembly library that provide access to instruction information, and fixed ambiguous wording in the comments for the header. llvm-svn: 95274
This commit is contained in:
parent
09de8ecd88
commit
9eb8d6fb43
|
@ -176,7 +176,7 @@ void EDReleaseInst(EDInstRef inst);
|
|||
/*!
|
||||
@function EDInstByteSize
|
||||
@param inst The instruction to be queried.
|
||||
@result The number of bytes consumed by the instruction.
|
||||
@result The number of bytes in the instruction's machine-code representation.
|
||||
*/
|
||||
int EDInstByteSize(EDInstRef inst);
|
||||
|
||||
|
|
|
@ -201,6 +201,34 @@ int EDGetOperand(EDOperandRef *operand,
|
|||
return inst->getOperand(*operand, index);
|
||||
}
|
||||
|
||||
int EDOperandIsRegister(EDOperandRef operand) {
|
||||
return operand->isRegister();
|
||||
}
|
||||
|
||||
int EDOperandIsImmediate(EDOperandRef operand) {
|
||||
return operand->isImmediate();
|
||||
}
|
||||
|
||||
int EDOperandIsMemory(EDOperandRef operand) {
|
||||
return operand->isMemory();
|
||||
}
|
||||
|
||||
int EDRegisterOperandValue(unsigned *value,
|
||||
EDOperandRef operand) {
|
||||
if(!operand->isRegister())
|
||||
return -1;
|
||||
*value = operand->regVal();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int EDImmedateOperandValue(uint64_t *value,
|
||||
EDOperandRef operand) {
|
||||
if(!operand->isImmediate())
|
||||
return -1;
|
||||
*value = operand->immediateVal();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int EDEvaluateOperand(uint64_t *result,
|
||||
EDOperandRef operand,
|
||||
EDRegisterReaderCallback regReader,
|
||||
|
|
|
@ -125,6 +125,26 @@ int EDOperand::evaluate(uint64_t &result,
|
|||
return -1;
|
||||
}
|
||||
|
||||
int EDOperand::isRegister() {
|
||||
return(Inst.ThisInstInfo->operandFlags[OpIndex] & kOperandFlagRegister);
|
||||
}
|
||||
|
||||
unsigned EDOperand::regVal() {
|
||||
return Inst.Inst->getOperand(MCOpIndex).getReg();
|
||||
}
|
||||
|
||||
int EDOperand::isImmediate() {
|
||||
return(Inst.ThisInstInfo->operandFlags[OpIndex] & kOperandFlagImmediate);
|
||||
}
|
||||
|
||||
uint64_t EDOperand::immediateVal() {
|
||||
return Inst.Inst->getOperand(MCOpIndex).getImm();
|
||||
}
|
||||
|
||||
int EDOperand::isMemory() {
|
||||
return(Inst.ThisInstInfo->operandFlags[OpIndex] & kOperandFlagMemory);
|
||||
}
|
||||
|
||||
#ifdef __BLOCKS__
|
||||
struct RegisterReaderWrapper {
|
||||
EDRegisterBlock_t regBlock;
|
||||
|
|
|
@ -54,6 +54,19 @@ struct EDOperand {
|
|||
int evaluate(uint64_t &result,
|
||||
EDRegisterReaderCallback callback,
|
||||
void *arg);
|
||||
|
||||
/// isRegister - Returns 1 if the operand is a register or 0 otherwise
|
||||
int isRegister();
|
||||
/// regVal - Returns the register value.
|
||||
unsigned regVal();
|
||||
|
||||
/// isImmediate - Returns 1 if the operand is an immediate or 0 otherwise
|
||||
int isImmediate();
|
||||
/// immediateVal - Returns the immediate value.
|
||||
uint64_t immediateVal();
|
||||
|
||||
/// isMemory - Returns 1 if the operand is a memory location or 0 otherwise
|
||||
int isMemory();
|
||||
|
||||
#ifdef __BLOCKS__
|
||||
/// evaluate - Like evaluate for a callback, but uses a block instead
|
||||
|
|
Loading…
Reference in New Issue