mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 02:52:53 +02:00
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
05d47a0cf5
commit
7662f4139b
@ -176,7 +176,7 @@ void EDReleaseInst(EDInstRef inst);
|
|||||||
/*!
|
/*!
|
||||||
@function EDInstByteSize
|
@function EDInstByteSize
|
||||||
@param inst The instruction to be queried.
|
@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);
|
int EDInstByteSize(EDInstRef inst);
|
||||||
|
|
||||||
|
@ -201,6 +201,34 @@ int EDGetOperand(EDOperandRef *operand,
|
|||||||
return inst->getOperand(*operand, index);
|
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,
|
int EDEvaluateOperand(uint64_t *result,
|
||||||
EDOperandRef operand,
|
EDOperandRef operand,
|
||||||
EDRegisterReaderCallback regReader,
|
EDRegisterReaderCallback regReader,
|
||||||
|
@ -125,6 +125,26 @@ int EDOperand::evaluate(uint64_t &result,
|
|||||||
return -1;
|
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__
|
#ifdef __BLOCKS__
|
||||||
struct RegisterReaderWrapper {
|
struct RegisterReaderWrapper {
|
||||||
EDRegisterBlock_t regBlock;
|
EDRegisterBlock_t regBlock;
|
||||||
|
@ -54,6 +54,19 @@ struct EDOperand {
|
|||||||
int evaluate(uint64_t &result,
|
int evaluate(uint64_t &result,
|
||||||
EDRegisterReaderCallback callback,
|
EDRegisterReaderCallback callback,
|
||||||
void *arg);
|
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__
|
#ifdef __BLOCKS__
|
||||||
/// evaluate - Like evaluate for a callback, but uses a block instead
|
/// evaluate - Like evaluate for a callback, but uses a block instead
|
||||||
|
Loading…
Reference in New Issue
Block a user