PACK/UNPACK.
This commit is contained in:
@@ -1677,6 +1677,28 @@ Value* HIRBuilder::Swizzle(
|
||||
return i->dest;
|
||||
}
|
||||
|
||||
Value* HIRBuilder::Pack(Value* value, uint32_t pack_flags) {
|
||||
ASSERT_VECTOR_TYPE(value);
|
||||
Instr* i = AppendInstr(
|
||||
OPCODE_PACK_info, pack_flags,
|
||||
AllocValue(VEC128_TYPE));
|
||||
i->set_src1(value);
|
||||
i->src2.value = i->src3.value = NULL;
|
||||
return i->dest;
|
||||
}
|
||||
|
||||
Value* HIRBuilder::Unpack(Value* value, uint32_t pack_flags) {
|
||||
ASSERT_VECTOR_TYPE(value);
|
||||
// TODO(benvanik): check if this is a constant - sometimes this is just used
|
||||
// to initialize registers.
|
||||
Instr* i = AppendInstr(
|
||||
OPCODE_UNPACK_info, pack_flags,
|
||||
AllocValue(VEC128_TYPE));
|
||||
i->set_src1(value);
|
||||
i->src2.value = i->src3.value = NULL;
|
||||
return i->dest;
|
||||
}
|
||||
|
||||
Value* HIRBuilder::CompareExchange(
|
||||
Value* address, Value* compare_value, Value* exchange_value) {
|
||||
ASSERT_ADDRESS_TYPE(address);
|
||||
|
||||
@@ -194,7 +194,8 @@ public:
|
||||
TypeName part_type);
|
||||
Value* Swizzle(Value* value, TypeName part_type, uint32_t swizzle_mask);
|
||||
// SelectBits(cond, value1, value2)
|
||||
// pack/unpack/etc
|
||||
Value* Pack(Value* value, uint32_t pack_flags = 0);
|
||||
Value* Unpack(Value* value, uint32_t pack_flags = 0);
|
||||
|
||||
Value* CompareExchange(Value* address,
|
||||
Value* compare_value, Value* exchange_value);
|
||||
|
||||
@@ -66,6 +66,12 @@ enum Swizzles {
|
||||
SWIZZLE_XYZW_TO_ZWXY = SWIZZLE_MASK(2, 3, 0, 1),
|
||||
SWIZZLE_XYZW_TO_WXYZ = SWIZZLE_MASK(3, 0, 1, 2),
|
||||
};
|
||||
enum PackType {
|
||||
PACK_TYPE_D3DCOLOR = 0,
|
||||
PACK_TYPE_FLOAT16_2 = 1,
|
||||
PACK_TYPE_FLOAT16_4 = 2,
|
||||
PACK_TYPE_SHORT_2 = 3,
|
||||
};
|
||||
|
||||
|
||||
enum Opcode {
|
||||
@@ -173,6 +179,8 @@ enum Opcode {
|
||||
OPCODE_SPLAT,
|
||||
OPCODE_PERMUTE,
|
||||
OPCODE_SWIZZLE,
|
||||
OPCODE_PACK,
|
||||
OPCODE_UNPACK,
|
||||
|
||||
OPCODE_COMPARE_EXCHANGE,
|
||||
OPCODE_ATOMIC_EXCHANGE,
|
||||
|
||||
@@ -539,6 +539,18 @@ DEFINE_OPCODE(
|
||||
OPCODE_SIG_V_V_O,
|
||||
0);
|
||||
|
||||
DEFINE_OPCODE(
|
||||
OPCODE_PACK,
|
||||
"pack",
|
||||
OPCODE_SIG_V_V,
|
||||
0);
|
||||
|
||||
DEFINE_OPCODE(
|
||||
OPCODE_UNPACK,
|
||||
"unpack",
|
||||
OPCODE_SIG_V_V,
|
||||
0);
|
||||
|
||||
DEFINE_OPCODE(
|
||||
OPCODE_COMPARE_EXCHANGE,
|
||||
"compare_exchange",
|
||||
|
||||
Reference in New Issue
Block a user