VECTOR_SHR/_SHA. Fixing some disasm stuff.
This commit is contained in:
@@ -1433,7 +1433,7 @@ Value* HIRBuilder::Shl(Value* value1, int8_t value2) {
|
||||
}
|
||||
|
||||
Value* HIRBuilder::VectorShl(Value* value1, Value* value2,
|
||||
TypeName part_type) {
|
||||
TypeName part_type) {
|
||||
ASSERT_VECTOR_TYPE(value1);
|
||||
ASSERT_VECTOR_TYPE(value2);
|
||||
|
||||
@@ -1469,6 +1469,20 @@ Value* HIRBuilder::Shr(Value* value1, int8_t value2) {
|
||||
return Shr(value1, LoadConstant(value2));
|
||||
}
|
||||
|
||||
Value* HIRBuilder::VectorShr(Value* value1, Value* value2,
|
||||
TypeName part_type) {
|
||||
ASSERT_VECTOR_TYPE(value1);
|
||||
ASSERT_VECTOR_TYPE(value2);
|
||||
|
||||
Instr* i = AppendInstr(
|
||||
OPCODE_VECTOR_SHR_info, part_type,
|
||||
AllocValue(value1->type));
|
||||
i->set_src1(value1);
|
||||
i->set_src2(value2);
|
||||
i->src3.value = NULL;
|
||||
return i->dest;
|
||||
}
|
||||
|
||||
Value* HIRBuilder::Sha(Value* value1, Value* value2) {
|
||||
ASSERT_INTEGER_TYPE(value1);
|
||||
ASSERT_INTEGER_TYPE(value2);
|
||||
@@ -1492,6 +1506,20 @@ Value* HIRBuilder::Sha(Value* value1, int8_t value2) {
|
||||
return Sha(value1, LoadConstant(value2));
|
||||
}
|
||||
|
||||
Value* HIRBuilder::VectorSha(Value* value1, Value* value2,
|
||||
TypeName part_type) {
|
||||
ASSERT_VECTOR_TYPE(value1);
|
||||
ASSERT_VECTOR_TYPE(value2);
|
||||
|
||||
Instr* i = AppendInstr(
|
||||
OPCODE_VECTOR_SHA_info, part_type,
|
||||
AllocValue(value1->type));
|
||||
i->set_src1(value1);
|
||||
i->set_src2(value2);
|
||||
i->src3.value = NULL;
|
||||
return i->dest;
|
||||
}
|
||||
|
||||
Value* HIRBuilder::RotateLeft(Value* value1, Value* value2) {
|
||||
ASSERT_INTEGER_TYPE(value1);
|
||||
ASSERT_INTEGER_TYPE(value2);
|
||||
|
||||
@@ -173,12 +173,14 @@ public:
|
||||
Value* Xor(Value* value1, Value* value2);
|
||||
Value* Not(Value* value);
|
||||
Value* Shl(Value* value1, Value* value2);
|
||||
Value* VectorShl(Value* value1, Value* value2, TypeName part_type);
|
||||
Value* Shl(Value* value1, int8_t value2);
|
||||
Value* VectorShl(Value* value1, Value* value2, TypeName part_type);
|
||||
Value* Shr(Value* value1, Value* value2);
|
||||
Value* Shr(Value* value1, int8_t value2);
|
||||
Value* VectorShr(Value* value1, Value* value2, TypeName part_type);
|
||||
Value* Sha(Value* value1, Value* value2);
|
||||
Value* Sha(Value* value1, int8_t value2);
|
||||
Value* VectorSha(Value* value1, Value* value2, TypeName part_type);
|
||||
Value* RotateLeft(Value* value1, Value* value2);
|
||||
Value* ByteSwap(Value* value);
|
||||
Value* CountLeadingZeros(Value* value);
|
||||
|
||||
@@ -157,7 +157,9 @@ enum Opcode {
|
||||
OPCODE_SHL,
|
||||
OPCODE_VECTOR_SHL,
|
||||
OPCODE_SHR,
|
||||
OPCODE_VECTOR_SHR,
|
||||
OPCODE_SHA,
|
||||
OPCODE_VECTOR_SHA,
|
||||
OPCODE_ROTATE_LEFT,
|
||||
OPCODE_BYTE_SWAP,
|
||||
OPCODE_CNTLZ,
|
||||
|
||||
@@ -463,12 +463,24 @@ DEFINE_OPCODE(
|
||||
OPCODE_SIG_V_V_V,
|
||||
0);
|
||||
|
||||
DEFINE_OPCODE(
|
||||
OPCODE_VECTOR_SHR,
|
||||
"vector_shr",
|
||||
OPCODE_SIG_V_V_V,
|
||||
0);
|
||||
|
||||
DEFINE_OPCODE(
|
||||
OPCODE_SHA,
|
||||
"sha",
|
||||
OPCODE_SIG_V_V_V,
|
||||
0);
|
||||
|
||||
DEFINE_OPCODE(
|
||||
OPCODE_VECTOR_SHA,
|
||||
"vector_sha",
|
||||
OPCODE_SIG_V_V_V,
|
||||
0);
|
||||
|
||||
DEFINE_OPCODE(
|
||||
OPCODE_ROTATE_LEFT,
|
||||
"rotate_left",
|
||||
|
||||
Reference in New Issue
Block a user