mirror of
https://github.com/corda/corda.git
synced 2025-02-02 17:21:06 +00:00
added floating point support, split plan function.
This commit is contained in:
parent
f773c9e610
commit
c7a1a7af77
@ -36,7 +36,8 @@ enum UnaryOperation {
|
|||||||
JumpIfLessOrEqual,
|
JumpIfLessOrEqual,
|
||||||
JumpIfGreaterOrEqual,
|
JumpIfGreaterOrEqual,
|
||||||
JumpIfEqual,
|
JumpIfEqual,
|
||||||
JumpIfNotEqual
|
JumpIfNotEqual,
|
||||||
|
JumpIfUnordered
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned UnaryOperationCount = JumpIfNotEqual + 1;
|
const unsigned UnaryOperationCount = JumpIfNotEqual + 1;
|
||||||
@ -45,10 +46,24 @@ enum BinaryOperation {
|
|||||||
Move,
|
Move,
|
||||||
MoveZ,
|
MoveZ,
|
||||||
Compare,
|
Compare,
|
||||||
Negate
|
Negate,
|
||||||
|
|
||||||
|
//extensions:
|
||||||
|
FloatNegate,
|
||||||
|
FloatCompare,
|
||||||
|
Float2Float,
|
||||||
|
Float2Int,
|
||||||
|
Int2Float,
|
||||||
|
|
||||||
|
//intrinsic functions:
|
||||||
|
FloatSqrt,
|
||||||
|
FloatAbs,
|
||||||
|
Abs,
|
||||||
|
|
||||||
|
NoBinaryOperation = -1
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned BinaryOperationCount = Negate + 1;
|
const unsigned BinaryOperationCount = Abs + 1;
|
||||||
|
|
||||||
enum TernaryOperation {
|
enum TernaryOperation {
|
||||||
LongCompare,
|
LongCompare,
|
||||||
@ -62,10 +77,23 @@ enum TernaryOperation {
|
|||||||
UnsignedShiftRight,
|
UnsignedShiftRight,
|
||||||
And,
|
And,
|
||||||
Or,
|
Or,
|
||||||
Xor
|
Xor,
|
||||||
|
|
||||||
|
//extensions:
|
||||||
|
FloatAdd,
|
||||||
|
FloatSubtract,
|
||||||
|
FloatMultiply,
|
||||||
|
FloatDivide,
|
||||||
|
FloatRemainder,
|
||||||
|
|
||||||
|
//intrinsic functions:
|
||||||
|
FloatMax,
|
||||||
|
FloatMin,
|
||||||
|
|
||||||
|
NoTernaryOperation = -1
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned TernaryOperationCount = Xor + 1;
|
const unsigned TernaryOperationCount = FloatMin + 1;
|
||||||
|
|
||||||
enum OperandType {
|
enum OperandType {
|
||||||
ConstantOperand,
|
ConstantOperand,
|
||||||
@ -258,16 +286,20 @@ class Assembler {
|
|||||||
class Architecture {
|
class Architecture {
|
||||||
public:
|
public:
|
||||||
virtual unsigned registerCount() = 0;
|
virtual unsigned registerCount() = 0;
|
||||||
|
virtual unsigned generalRegisterCount() = 0;
|
||||||
|
virtual unsigned floatRegisterCount() = 0;
|
||||||
|
virtual uint64_t generalRegisters() = 0;
|
||||||
|
virtual uint64_t floatRegisters() = 0;
|
||||||
|
|
||||||
virtual int stack() = 0;
|
virtual int stack() = 0;
|
||||||
virtual int thread() = 0;
|
virtual int thread() = 0;
|
||||||
virtual int returnLow() = 0;
|
virtual int returnLow() = 0;
|
||||||
virtual int returnHigh() = 0;
|
virtual int returnHigh() = 0;
|
||||||
|
|
||||||
virtual bool condensedAddressing() = 0;
|
|
||||||
|
|
||||||
virtual bool bigEndian() = 0;
|
virtual bool bigEndian() = 0;
|
||||||
|
|
||||||
|
virtual bool supportsFloatCompare(unsigned size) = 0;
|
||||||
|
|
||||||
virtual bool reserved(int register_) = 0;
|
virtual bool reserved(int register_) = 0;
|
||||||
|
|
||||||
virtual unsigned argumentFootprint(unsigned footprint) = 0;
|
virtual unsigned argumentFootprint(unsigned footprint) = 0;
|
||||||
@ -288,23 +320,35 @@ class Assembler {
|
|||||||
virtual unsigned frameFooterSize() = 0;
|
virtual unsigned frameFooterSize() = 0;
|
||||||
virtual void nextFrame(void** stack, void** base) = 0;
|
virtual void nextFrame(void** stack, void** base) = 0;
|
||||||
|
|
||||||
|
virtual BinaryOperation hasBinaryIntrinsic(Thread* t, object method) = 0;
|
||||||
|
virtual TernaryOperation hasTernaryIntrinsic(Thread* t, object method) = 0;
|
||||||
|
|
||||||
virtual void plan
|
virtual void plan
|
||||||
(UnaryOperation op,
|
(UnaryOperation op,
|
||||||
unsigned aSize, uint8_t* aTypeMask, uint64_t* aRegisterMask,
|
unsigned aSize, uint8_t* aTypeMask, uint64_t* aRegisterMask,
|
||||||
bool* thunk) = 0;
|
bool* thunk) = 0;
|
||||||
|
|
||||||
virtual void plan
|
virtual void planSource
|
||||||
(BinaryOperation op,
|
(BinaryOperation op,
|
||||||
unsigned aSize, uint8_t* aTypeMask, uint64_t* aRegisterMask,
|
unsigned aSize, uint8_t* aTypeMask, uint64_t* aRegisterMask,
|
||||||
unsigned bSize, uint8_t* bTypeMask, uint64_t* bRegisterMask,
|
unsigned bSize, bool* thunk) = 0;
|
||||||
bool* thunk) = 0;
|
|
||||||
|
|
||||||
virtual void plan
|
virtual void planDestination
|
||||||
|
(BinaryOperation op,
|
||||||
|
unsigned aSize, const uint8_t* aTypeMask, const uint64_t* aRegisterMask,
|
||||||
|
unsigned bSize, uint8_t* bTypeMask, uint64_t* bRegisterMask) = 0;
|
||||||
|
|
||||||
|
virtual void planSource
|
||||||
(TernaryOperation op,
|
(TernaryOperation op,
|
||||||
unsigned aSize, uint8_t* aTypeMask, uint64_t* aRegisterMask,
|
unsigned aSize, uint8_t* aTypeMask, uint64_t* aRegisterMask,
|
||||||
unsigned bSize, uint8_t* bTypeMask, uint64_t* bRegisterMask,
|
unsigned bSize, uint8_t* bTypeMask, uint64_t* bRegisterMask,
|
||||||
unsigned cSize, uint8_t* cTypeMask, uint64_t* cRegisterMask,
|
unsigned cSize, bool* thunk) = 0;
|
||||||
bool* thunk) = 0;
|
|
||||||
|
virtual void planDestination
|
||||||
|
(TernaryOperation op,
|
||||||
|
unsigned aSize, const uint8_t* aTypeMask, const uint64_t* aRegisterMask,
|
||||||
|
unsigned bSize, const uint8_t* bTypeMask, const uint64_t* bRegisterMask,
|
||||||
|
unsigned cSize, uint8_t* cTypeMask, uint64_t* cRegisterMask) = 0;
|
||||||
|
|
||||||
virtual void acquire() = 0;
|
virtual void acquire() = 0;
|
||||||
virtual void release() = 0;
|
virtual void release() = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user