shader: Implement SHF
This commit is contained in:
parent
5465cb1561
commit
924f0a9149
8 changed files with 119 additions and 31 deletions
|
@ -813,8 +813,15 @@ U32 IREmitter::IAbs(const U32& value) {
|
|||
return Inst<U32>(Opcode::IAbs32, value);
|
||||
}
|
||||
|
||||
U32 IREmitter::ShiftLeftLogical(const U32& base, const U32& shift) {
|
||||
return Inst<U32>(Opcode::ShiftLeftLogical32, base, shift);
|
||||
U32U64 IREmitter::ShiftLeftLogical(const U32U64& base, const U32& shift) {
|
||||
switch (base.Type()) {
|
||||
case Type::U32:
|
||||
return Inst<U32>(Opcode::ShiftLeftLogical32, base, shift);
|
||||
case Type::U64:
|
||||
return Inst<U64>(Opcode::ShiftLeftLogical64, base, shift);
|
||||
default:
|
||||
ThrowInvalidType(base.Type());
|
||||
}
|
||||
}
|
||||
|
||||
U32U64 IREmitter::ShiftRightLogical(const U32U64& base, const U32& shift) {
|
||||
|
@ -828,8 +835,15 @@ U32U64 IREmitter::ShiftRightLogical(const U32U64& base, const U32& shift) {
|
|||
}
|
||||
}
|
||||
|
||||
U32 IREmitter::ShiftRightArithmetic(const U32& base, const U32& shift) {
|
||||
return Inst<U32>(Opcode::ShiftRightArithmetic32, base, shift);
|
||||
U32U64 IREmitter::ShiftRightArithmetic(const U32U64& base, const U32& shift) {
|
||||
switch (base.Type()) {
|
||||
case Type::U32:
|
||||
return Inst<U32>(Opcode::ShiftRightArithmetic32, base, shift);
|
||||
case Type::U64:
|
||||
return Inst<U64>(Opcode::ShiftRightArithmetic64, base, shift);
|
||||
default:
|
||||
ThrowInvalidType(base.Type());
|
||||
}
|
||||
}
|
||||
|
||||
U32 IREmitter::BitwiseAnd(const U32& a, const U32& b) {
|
||||
|
|
|
@ -150,9 +150,9 @@ public:
|
|||
[[nodiscard]] U32 IMul(const U32& a, const U32& b);
|
||||
[[nodiscard]] U32U64 INeg(const U32U64& value);
|
||||
[[nodiscard]] U32 IAbs(const U32& value);
|
||||
[[nodiscard]] U32 ShiftLeftLogical(const U32& base, const U32& shift);
|
||||
[[nodiscard]] U32U64 ShiftLeftLogical(const U32U64& base, const U32& shift);
|
||||
[[nodiscard]] U32U64 ShiftRightLogical(const U32U64& base, const U32& shift);
|
||||
[[nodiscard]] U32 ShiftRightArithmetic(const U32& base, const U32& shift);
|
||||
[[nodiscard]] U32U64 ShiftRightArithmetic(const U32U64& base, const U32& shift);
|
||||
[[nodiscard]] U32 BitwiseAnd(const U32& a, const U32& b);
|
||||
[[nodiscard]] U32 BitwiseOr(const U32& a, const U32& b);
|
||||
[[nodiscard]] U32 BitwiseXor(const U32& a, const U32& b);
|
||||
|
|
|
@ -236,9 +236,11 @@ OPCODE(INeg32, U32, U32,
|
|||
OPCODE(INeg64, U64, U64, )
|
||||
OPCODE(IAbs32, U32, U32, )
|
||||
OPCODE(ShiftLeftLogical32, U32, U32, U32, )
|
||||
OPCODE(ShiftLeftLogical64, U64, U64, U32, )
|
||||
OPCODE(ShiftRightLogical32, U32, U32, U32, )
|
||||
OPCODE(ShiftRightLogical64, U64, U64, U32, )
|
||||
OPCODE(ShiftRightArithmetic32, U32, U32, U32, )
|
||||
OPCODE(ShiftRightArithmetic64, U64, U64, U32, )
|
||||
OPCODE(BitwiseAnd32, U32, U32, U32, )
|
||||
OPCODE(BitwiseOr32, U32, U32, U32, )
|
||||
OPCODE(BitwiseXor32, U32, U32, U32, )
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue