diff --git a/libs/gamecode/swizzle.py b/libs/gamecode/swizzle.py index 673f5aec4..f61d50de5 100644 --- a/libs/gamecode/swizzle.py +++ b/libs/gamecode/swizzle.py @@ -5,6 +5,12 @@ def iter(func): for l in range(4): func(i, j, k, l) +def iter16(func): + for i in range(16): + func(i) + +import sys + coord=['x', 'y', 'z', 'w'] def label(i, j, k, l): return f"swizzle_{coord[l]}{coord[k]}{coord[j]}{coord[i]}" @@ -15,7 +21,163 @@ def print_ref(i, j, k, l): def print_op(i, j, k, l): print(f"\t{label(i, j, k, l)}: vec = swizzle (vec, (pr_ivec4_t) {{ {l}, {k}, {j}, {i} }}); goto negate;") -iter(print_op) -print("\tstatic void *swizzle_table[256] = {") -iter(print_ref) -print("\t};") +def print_data(i, j, k, l): + print(f"\t{{ {l+1:2}, {k+1:2}, {j+1:2}, {i+1:2} }},") + +def print_swizzle_f(i, j, k, l): + swiz = i * 64 + j * 16 + k * 4 + l + addr = (swiz + 1) * 4 + print(f"\t{{ OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x{swiz:04x}, {addr} }},") + +def print_neg_f(i): + swiz = i * 0x100 + 0xe4 + addr = (i + 1) * 4 + print(f"\t{{ OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x{swiz:04x}, {addr} }},") + +def print_zero_f(i): + swiz = i * 0x1000 + 0xe4 + addr = (i + 1) * 4 + print(f"\t{{ OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x{swiz:04x}, {addr} }},") + +def print_swizzle_d(i, j, k, l): + swiz = i * 64 + j * 16 + k * 4 + l + addr = (swiz + 1) * 8 + print(f"\t{{ OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x{swiz:04x}, {addr} }},") + +def print_neg_d(i): + swiz = i * 0x100 + 0xe4 + addr = (i + 1) * 8 + print(f"\t{{ OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x{swiz:04x}, {addr} }},") + +def print_zero_d(i): + swiz = i * 0x1000 + 0xe4 + addr = (i + 1) * 8 + print(f"\t{{ OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x{swiz:04x}, {addr} }},") + +def print_eights(i, j, k, l): + print(f"\t{{ {8:2}, {8:2}, {8:2}, {8:2} }},") + +def print_nines(i): + print(f"\t{{ {9:2}, {9:2}, {9:2}, {9:2} }},") + +def print_neg(n): + x = [1, 2, 3, 4] + for i in range(4): + if n & (1<< i): + x[i] = -x[i] + print(f"\t{{ {x[0]:2}, {x[1]:2}, {x[2]:2}, {x[3]:2} }},") + +def print_zero(z): + x = [1, 2, 3, 4] + for i in range(4): + if z & (1<< i): + x[i] = 0 + print(f"\t{{ {x[0]:2}, {x[1]:2}, {x[2]:2}, {x[3]:2} }},") + +types = ["f", "d"] +tests = ["swizzle", "neg", "zero"] + +if sys.argv[1] == "case": + iter(print_op) + print("\tstatic void *swizzle_table[256] = {") + iter(print_ref) + print("\t};") +elif sys.argv[1] == "test": + print('#include "head.c"') + print() + print("static pr_vec4_t swizzle_f_init[] = {") + print_data(3, 2, 1, 0) + iter(print_eights) + print("};") + print("static pr_vec4_t swizzle_f_expect[] = {") + print_data(3, 2, 1, 0) + iter(print_data) + print("};") + print() + print("static dstatement_t swizzle_f_statements[] = {") + iter(print_swizzle_f) + print("};") + print() + print("static pr_vec4_t neg_f_init[] = {") + print_neg(0) + iter16(print_nines) + print("};") + print() + print("static pr_vec4_t neg_f_expect[] = {") + print_neg(0) + iter16(print_neg) + print("};") + print() + print("static dstatement_t neg_f_statements[] = {") + iter16(print_neg_f) + print("};") + print() + print("static pr_vec4_t zero_f_init[] = {") + print_zero(0) + iter16(print_nines) + print("};") + print() + print("static pr_vec4_t zero_f_expect[] = {") + print_zero(0) + iter16(print_zero) + print("};") + print() + print("static dstatement_t zero_f_statements[] = {") + iter16(print_zero_f) + print("};") + print() + print("static pr_dvec4_t swizzle_d_init[] = {") + print_data(3, 2, 1, 0) + iter(print_eights) + print("};") + print("static pr_dvec4_t swizzle_d_expect[] = {") + print_data(3, 2, 1, 0) + iter(print_data) + print("};") + print() + print("static dstatement_t swizzle_d_statements[] = {") + iter(print_swizzle_d) + print("};") + print() + print("static pr_dvec4_t neg_d_init[] = {") + print_neg(0) + iter16(print_nines) + print("};") + print() + print("static pr_dvec4_t neg_d_expect[] = {") + print_neg(0) + iter16(print_neg) + print("};") + print() + print("static dstatement_t neg_d_statements[] = {") + iter16(print_neg_d) + print("};") + print() + print("static pr_dvec4_t zero_d_init[] = {") + print_zero(0) + iter16(print_nines) + print("};") + print() + print("static pr_dvec4_t zero_d_expect[] = {") + print_zero(0) + iter16(print_zero) + print("};") + print() + print("static dstatement_t zero_d_statements[] = {") + iter16(print_zero_d) + print("};") + print() + print("test_t tests[] = {") + for t in types: + for o in tests: + print("\t{") + print(f'\t\t.desc = "{o} {t}",') + print(f"\t\t.num_globals = num_globals({o}_{t}_init,{o}_{t}_expect),") + print(f"\t\t.num_statements = num_statements({o}_{t}_statements),") + print(f"\t\t.statements = {o}_{t}_statements,") + print(f"\t\t.init_globals = (pr_int_t *) {o}_{t}_init,") + print(f"\t\t.expect_globals = (pr_int_t *) {o}_{t}_expect,") + print("\t},") + print("};") + print() + print('#include "main.c"') diff --git a/libs/gamecode/test/Makemodule.am b/libs/gamecode/test/Makemodule.am index 8fc813622..0788861f8 100644 --- a/libs/gamecode/test/Makemodule.am +++ b/libs/gamecode/test/Makemodule.am @@ -19,6 +19,7 @@ libs_gamecode_tests = \ libs/gamecode/test/test-stack \ libs/gamecode/test/test-store \ libs/gamecode/test/test-string \ + libs/gamecode/test/test-swizzle \ libs/gamecode/test/test-unsigned \ libs/gamecode/test/test-vector \ libs/gamecode/test/test-with @@ -133,6 +134,11 @@ libs_gamecode_test_test_string_SOURCES= \ libs_gamecode_test_test_string_LDADD= $(test_gamecode_libs) libs_gamecode_test_test_string_DEPENDENCIES= $(test_gamecode_libs) +libs_gamecode_test_test_swizzle_SOURCES= \ + libs/gamecode/test/test-swizzle.c +libs_gamecode_test_test_swizzle_LDADD= $(test_gamecode_libs) +libs_gamecode_test_test_swizzle_DEPENDENCIES= $(test_gamecode_libs) + libs_gamecode_test_test_unsigned_SOURCES= \ libs/gamecode/test/test-unsigned.c libs_gamecode_test_test_unsigned_LDADD= $(test_gamecode_libs) diff --git a/libs/gamecode/test/test-swizzle.c b/libs/gamecode/test/test-swizzle.c new file mode 100644 index 000000000..c47acbb5c --- /dev/null +++ b/libs/gamecode/test/test-swizzle.c @@ -0,0 +1,1846 @@ +#include "head.c" + +static pr_vec4_t swizzle_f_init[] = { + { 1, 2, 3, 4 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, +}; +static pr_vec4_t swizzle_f_expect[] = { + { 1, 2, 3, 4 }, + { 1, 1, 1, 1 }, + { 2, 1, 1, 1 }, + { 3, 1, 1, 1 }, + { 4, 1, 1, 1 }, + { 1, 2, 1, 1 }, + { 2, 2, 1, 1 }, + { 3, 2, 1, 1 }, + { 4, 2, 1, 1 }, + { 1, 3, 1, 1 }, + { 2, 3, 1, 1 }, + { 3, 3, 1, 1 }, + { 4, 3, 1, 1 }, + { 1, 4, 1, 1 }, + { 2, 4, 1, 1 }, + { 3, 4, 1, 1 }, + { 4, 4, 1, 1 }, + { 1, 1, 2, 1 }, + { 2, 1, 2, 1 }, + { 3, 1, 2, 1 }, + { 4, 1, 2, 1 }, + { 1, 2, 2, 1 }, + { 2, 2, 2, 1 }, + { 3, 2, 2, 1 }, + { 4, 2, 2, 1 }, + { 1, 3, 2, 1 }, + { 2, 3, 2, 1 }, + { 3, 3, 2, 1 }, + { 4, 3, 2, 1 }, + { 1, 4, 2, 1 }, + { 2, 4, 2, 1 }, + { 3, 4, 2, 1 }, + { 4, 4, 2, 1 }, + { 1, 1, 3, 1 }, + { 2, 1, 3, 1 }, + { 3, 1, 3, 1 }, + { 4, 1, 3, 1 }, + { 1, 2, 3, 1 }, + { 2, 2, 3, 1 }, + { 3, 2, 3, 1 }, + { 4, 2, 3, 1 }, + { 1, 3, 3, 1 }, + { 2, 3, 3, 1 }, + { 3, 3, 3, 1 }, + { 4, 3, 3, 1 }, + { 1, 4, 3, 1 }, + { 2, 4, 3, 1 }, + { 3, 4, 3, 1 }, + { 4, 4, 3, 1 }, + { 1, 1, 4, 1 }, + { 2, 1, 4, 1 }, + { 3, 1, 4, 1 }, + { 4, 1, 4, 1 }, + { 1, 2, 4, 1 }, + { 2, 2, 4, 1 }, + { 3, 2, 4, 1 }, + { 4, 2, 4, 1 }, + { 1, 3, 4, 1 }, + { 2, 3, 4, 1 }, + { 3, 3, 4, 1 }, + { 4, 3, 4, 1 }, + { 1, 4, 4, 1 }, + { 2, 4, 4, 1 }, + { 3, 4, 4, 1 }, + { 4, 4, 4, 1 }, + { 1, 1, 1, 2 }, + { 2, 1, 1, 2 }, + { 3, 1, 1, 2 }, + { 4, 1, 1, 2 }, + { 1, 2, 1, 2 }, + { 2, 2, 1, 2 }, + { 3, 2, 1, 2 }, + { 4, 2, 1, 2 }, + { 1, 3, 1, 2 }, + { 2, 3, 1, 2 }, + { 3, 3, 1, 2 }, + { 4, 3, 1, 2 }, + { 1, 4, 1, 2 }, + { 2, 4, 1, 2 }, + { 3, 4, 1, 2 }, + { 4, 4, 1, 2 }, + { 1, 1, 2, 2 }, + { 2, 1, 2, 2 }, + { 3, 1, 2, 2 }, + { 4, 1, 2, 2 }, + { 1, 2, 2, 2 }, + { 2, 2, 2, 2 }, + { 3, 2, 2, 2 }, + { 4, 2, 2, 2 }, + { 1, 3, 2, 2 }, + { 2, 3, 2, 2 }, + { 3, 3, 2, 2 }, + { 4, 3, 2, 2 }, + { 1, 4, 2, 2 }, + { 2, 4, 2, 2 }, + { 3, 4, 2, 2 }, + { 4, 4, 2, 2 }, + { 1, 1, 3, 2 }, + { 2, 1, 3, 2 }, + { 3, 1, 3, 2 }, + { 4, 1, 3, 2 }, + { 1, 2, 3, 2 }, + { 2, 2, 3, 2 }, + { 3, 2, 3, 2 }, + { 4, 2, 3, 2 }, + { 1, 3, 3, 2 }, + { 2, 3, 3, 2 }, + { 3, 3, 3, 2 }, + { 4, 3, 3, 2 }, + { 1, 4, 3, 2 }, + { 2, 4, 3, 2 }, + { 3, 4, 3, 2 }, + { 4, 4, 3, 2 }, + { 1, 1, 4, 2 }, + { 2, 1, 4, 2 }, + { 3, 1, 4, 2 }, + { 4, 1, 4, 2 }, + { 1, 2, 4, 2 }, + { 2, 2, 4, 2 }, + { 3, 2, 4, 2 }, + { 4, 2, 4, 2 }, + { 1, 3, 4, 2 }, + { 2, 3, 4, 2 }, + { 3, 3, 4, 2 }, + { 4, 3, 4, 2 }, + { 1, 4, 4, 2 }, + { 2, 4, 4, 2 }, + { 3, 4, 4, 2 }, + { 4, 4, 4, 2 }, + { 1, 1, 1, 3 }, + { 2, 1, 1, 3 }, + { 3, 1, 1, 3 }, + { 4, 1, 1, 3 }, + { 1, 2, 1, 3 }, + { 2, 2, 1, 3 }, + { 3, 2, 1, 3 }, + { 4, 2, 1, 3 }, + { 1, 3, 1, 3 }, + { 2, 3, 1, 3 }, + { 3, 3, 1, 3 }, + { 4, 3, 1, 3 }, + { 1, 4, 1, 3 }, + { 2, 4, 1, 3 }, + { 3, 4, 1, 3 }, + { 4, 4, 1, 3 }, + { 1, 1, 2, 3 }, + { 2, 1, 2, 3 }, + { 3, 1, 2, 3 }, + { 4, 1, 2, 3 }, + { 1, 2, 2, 3 }, + { 2, 2, 2, 3 }, + { 3, 2, 2, 3 }, + { 4, 2, 2, 3 }, + { 1, 3, 2, 3 }, + { 2, 3, 2, 3 }, + { 3, 3, 2, 3 }, + { 4, 3, 2, 3 }, + { 1, 4, 2, 3 }, + { 2, 4, 2, 3 }, + { 3, 4, 2, 3 }, + { 4, 4, 2, 3 }, + { 1, 1, 3, 3 }, + { 2, 1, 3, 3 }, + { 3, 1, 3, 3 }, + { 4, 1, 3, 3 }, + { 1, 2, 3, 3 }, + { 2, 2, 3, 3 }, + { 3, 2, 3, 3 }, + { 4, 2, 3, 3 }, + { 1, 3, 3, 3 }, + { 2, 3, 3, 3 }, + { 3, 3, 3, 3 }, + { 4, 3, 3, 3 }, + { 1, 4, 3, 3 }, + { 2, 4, 3, 3 }, + { 3, 4, 3, 3 }, + { 4, 4, 3, 3 }, + { 1, 1, 4, 3 }, + { 2, 1, 4, 3 }, + { 3, 1, 4, 3 }, + { 4, 1, 4, 3 }, + { 1, 2, 4, 3 }, + { 2, 2, 4, 3 }, + { 3, 2, 4, 3 }, + { 4, 2, 4, 3 }, + { 1, 3, 4, 3 }, + { 2, 3, 4, 3 }, + { 3, 3, 4, 3 }, + { 4, 3, 4, 3 }, + { 1, 4, 4, 3 }, + { 2, 4, 4, 3 }, + { 3, 4, 4, 3 }, + { 4, 4, 4, 3 }, + { 1, 1, 1, 4 }, + { 2, 1, 1, 4 }, + { 3, 1, 1, 4 }, + { 4, 1, 1, 4 }, + { 1, 2, 1, 4 }, + { 2, 2, 1, 4 }, + { 3, 2, 1, 4 }, + { 4, 2, 1, 4 }, + { 1, 3, 1, 4 }, + { 2, 3, 1, 4 }, + { 3, 3, 1, 4 }, + { 4, 3, 1, 4 }, + { 1, 4, 1, 4 }, + { 2, 4, 1, 4 }, + { 3, 4, 1, 4 }, + { 4, 4, 1, 4 }, + { 1, 1, 2, 4 }, + { 2, 1, 2, 4 }, + { 3, 1, 2, 4 }, + { 4, 1, 2, 4 }, + { 1, 2, 2, 4 }, + { 2, 2, 2, 4 }, + { 3, 2, 2, 4 }, + { 4, 2, 2, 4 }, + { 1, 3, 2, 4 }, + { 2, 3, 2, 4 }, + { 3, 3, 2, 4 }, + { 4, 3, 2, 4 }, + { 1, 4, 2, 4 }, + { 2, 4, 2, 4 }, + { 3, 4, 2, 4 }, + { 4, 4, 2, 4 }, + { 1, 1, 3, 4 }, + { 2, 1, 3, 4 }, + { 3, 1, 3, 4 }, + { 4, 1, 3, 4 }, + { 1, 2, 3, 4 }, + { 2, 2, 3, 4 }, + { 3, 2, 3, 4 }, + { 4, 2, 3, 4 }, + { 1, 3, 3, 4 }, + { 2, 3, 3, 4 }, + { 3, 3, 3, 4 }, + { 4, 3, 3, 4 }, + { 1, 4, 3, 4 }, + { 2, 4, 3, 4 }, + { 3, 4, 3, 4 }, + { 4, 4, 3, 4 }, + { 1, 1, 4, 4 }, + { 2, 1, 4, 4 }, + { 3, 1, 4, 4 }, + { 4, 1, 4, 4 }, + { 1, 2, 4, 4 }, + { 2, 2, 4, 4 }, + { 3, 2, 4, 4 }, + { 4, 2, 4, 4 }, + { 1, 3, 4, 4 }, + { 2, 3, 4, 4 }, + { 3, 3, 4, 4 }, + { 4, 3, 4, 4 }, + { 1, 4, 4, 4 }, + { 2, 4, 4, 4 }, + { 3, 4, 4, 4 }, + { 4, 4, 4, 4 }, +}; + +static dstatement_t swizzle_f_statements[] = { + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0000, 4 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0001, 8 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0002, 12 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0003, 16 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0004, 20 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0005, 24 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0006, 28 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0007, 32 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0008, 36 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0009, 40 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x000a, 44 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x000b, 48 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x000c, 52 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x000d, 56 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x000e, 60 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x000f, 64 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0010, 68 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0011, 72 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0012, 76 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0013, 80 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0014, 84 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0015, 88 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0016, 92 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0017, 96 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0018, 100 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0019, 104 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x001a, 108 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x001b, 112 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x001c, 116 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x001d, 120 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x001e, 124 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x001f, 128 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0020, 132 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0021, 136 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0022, 140 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0023, 144 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0024, 148 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0025, 152 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0026, 156 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0027, 160 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0028, 164 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0029, 168 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x002a, 172 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x002b, 176 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x002c, 180 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x002d, 184 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x002e, 188 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x002f, 192 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0030, 196 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0031, 200 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0032, 204 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0033, 208 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0034, 212 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0035, 216 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0036, 220 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0037, 224 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0038, 228 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0039, 232 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x003a, 236 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x003b, 240 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x003c, 244 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x003d, 248 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x003e, 252 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x003f, 256 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0040, 260 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0041, 264 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0042, 268 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0043, 272 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0044, 276 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0045, 280 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0046, 284 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0047, 288 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0048, 292 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0049, 296 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x004a, 300 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x004b, 304 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x004c, 308 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x004d, 312 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x004e, 316 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x004f, 320 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0050, 324 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0051, 328 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0052, 332 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0053, 336 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0054, 340 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0055, 344 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0056, 348 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0057, 352 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0058, 356 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0059, 360 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x005a, 364 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x005b, 368 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x005c, 372 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x005d, 376 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x005e, 380 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x005f, 384 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0060, 388 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0061, 392 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0062, 396 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0063, 400 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0064, 404 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0065, 408 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0066, 412 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0067, 416 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0068, 420 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0069, 424 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x006a, 428 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x006b, 432 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x006c, 436 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x006d, 440 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x006e, 444 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x006f, 448 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0070, 452 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0071, 456 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0072, 460 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0073, 464 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0074, 468 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0075, 472 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0076, 476 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0077, 480 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0078, 484 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0079, 488 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x007a, 492 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x007b, 496 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x007c, 500 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x007d, 504 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x007e, 508 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x007f, 512 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0080, 516 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0081, 520 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0082, 524 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0083, 528 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0084, 532 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0085, 536 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0086, 540 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0087, 544 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0088, 548 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0089, 552 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x008a, 556 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x008b, 560 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x008c, 564 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x008d, 568 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x008e, 572 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x008f, 576 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0090, 580 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0091, 584 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0092, 588 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0093, 592 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0094, 596 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0095, 600 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0096, 604 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0097, 608 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0098, 612 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0099, 616 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x009a, 620 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x009b, 624 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x009c, 628 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x009d, 632 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x009e, 636 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x009f, 640 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00a0, 644 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00a1, 648 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00a2, 652 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00a3, 656 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00a4, 660 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00a5, 664 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00a6, 668 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00a7, 672 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00a8, 676 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00a9, 680 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00aa, 684 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ab, 688 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ac, 692 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ad, 696 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ae, 700 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00af, 704 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00b0, 708 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00b1, 712 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00b2, 716 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00b3, 720 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00b4, 724 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00b5, 728 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00b6, 732 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00b7, 736 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00b8, 740 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00b9, 744 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ba, 748 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00bb, 752 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00bc, 756 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00bd, 760 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00be, 764 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00bf, 768 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00c0, 772 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00c1, 776 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00c2, 780 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00c3, 784 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00c4, 788 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00c5, 792 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00c6, 796 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00c7, 800 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00c8, 804 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00c9, 808 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ca, 812 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00cb, 816 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00cc, 820 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00cd, 824 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ce, 828 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00cf, 832 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00d0, 836 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00d1, 840 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00d2, 844 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00d3, 848 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00d4, 852 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00d5, 856 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00d6, 860 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00d7, 864 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00d8, 868 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00d9, 872 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00da, 876 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00db, 880 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00dc, 884 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00dd, 888 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00de, 892 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00df, 896 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e0, 900 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e1, 904 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e2, 908 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e3, 912 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e4, 916 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e5, 920 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e6, 924 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e7, 928 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e8, 932 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e9, 936 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ea, 940 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00eb, 944 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ec, 948 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ed, 952 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ee, 956 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ef, 960 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00f0, 964 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00f1, 968 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00f2, 972 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00f3, 976 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00f4, 980 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00f5, 984 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00f6, 988 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00f7, 992 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00f8, 996 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00f9, 1000 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00fa, 1004 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00fb, 1008 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00fc, 1012 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00fd, 1016 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00fe, 1020 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00ff, 1024 }, +}; + +static pr_vec4_t neg_f_init[] = { + { 1, 2, 3, 4 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, +}; + +static pr_vec4_t neg_f_expect[] = { + { 1, 2, 3, 4 }, + { 1, 2, 3, 4 }, + { -1, 2, 3, 4 }, + { 1, -2, 3, 4 }, + { -1, -2, 3, 4 }, + { 1, 2, -3, 4 }, + { -1, 2, -3, 4 }, + { 1, -2, -3, 4 }, + { -1, -2, -3, 4 }, + { 1, 2, 3, -4 }, + { -1, 2, 3, -4 }, + { 1, -2, 3, -4 }, + { -1, -2, 3, -4 }, + { 1, 2, -3, -4 }, + { -1, 2, -3, -4 }, + { 1, -2, -3, -4 }, + { -1, -2, -3, -4 }, +}; + +static dstatement_t neg_f_statements[] = { + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e4, 4 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x01e4, 8 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x02e4, 12 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x03e4, 16 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x04e4, 20 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x05e4, 24 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x06e4, 28 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x07e4, 32 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x08e4, 36 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x09e4, 40 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0ae4, 44 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0be4, 48 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0ce4, 52 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0de4, 56 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0ee4, 60 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x0fe4, 64 }, +}; + +static pr_vec4_t zero_f_init[] = { + { 1, 2, 3, 4 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, +}; + +static pr_vec4_t zero_f_expect[] = { + { 1, 2, 3, 4 }, + { 1, 2, 3, 4 }, + { 0, 2, 3, 4 }, + { 1, 0, 3, 4 }, + { 0, 0, 3, 4 }, + { 1, 2, 0, 4 }, + { 0, 2, 0, 4 }, + { 1, 0, 0, 4 }, + { 0, 0, 0, 4 }, + { 1, 2, 3, 0 }, + { 0, 2, 3, 0 }, + { 1, 0, 3, 0 }, + { 0, 0, 3, 0 }, + { 1, 2, 0, 0 }, + { 0, 2, 0, 0 }, + { 1, 0, 0, 0 }, + { 0, 0, 0, 0 }, +}; + +static dstatement_t zero_f_statements[] = { + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x00e4, 4 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x10e4, 8 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x20e4, 12 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x30e4, 16 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x40e4, 20 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x50e4, 24 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x60e4, 28 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x70e4, 32 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x80e4, 36 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0x90e4, 40 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0xa0e4, 44 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0xb0e4, 48 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0xc0e4, 52 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0xd0e4, 56 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0xe0e4, 60 }, + { OP(0, 0, 0, OP_SWIZZLE_F), 0, 0xf0e4, 64 }, +}; + +static pr_dvec4_t swizzle_d_init[] = { + { 1, 2, 3, 4 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, + { 8, 8, 8, 8 }, +}; +static pr_dvec4_t swizzle_d_expect[] = { + { 1, 2, 3, 4 }, + { 1, 1, 1, 1 }, + { 2, 1, 1, 1 }, + { 3, 1, 1, 1 }, + { 4, 1, 1, 1 }, + { 1, 2, 1, 1 }, + { 2, 2, 1, 1 }, + { 3, 2, 1, 1 }, + { 4, 2, 1, 1 }, + { 1, 3, 1, 1 }, + { 2, 3, 1, 1 }, + { 3, 3, 1, 1 }, + { 4, 3, 1, 1 }, + { 1, 4, 1, 1 }, + { 2, 4, 1, 1 }, + { 3, 4, 1, 1 }, + { 4, 4, 1, 1 }, + { 1, 1, 2, 1 }, + { 2, 1, 2, 1 }, + { 3, 1, 2, 1 }, + { 4, 1, 2, 1 }, + { 1, 2, 2, 1 }, + { 2, 2, 2, 1 }, + { 3, 2, 2, 1 }, + { 4, 2, 2, 1 }, + { 1, 3, 2, 1 }, + { 2, 3, 2, 1 }, + { 3, 3, 2, 1 }, + { 4, 3, 2, 1 }, + { 1, 4, 2, 1 }, + { 2, 4, 2, 1 }, + { 3, 4, 2, 1 }, + { 4, 4, 2, 1 }, + { 1, 1, 3, 1 }, + { 2, 1, 3, 1 }, + { 3, 1, 3, 1 }, + { 4, 1, 3, 1 }, + { 1, 2, 3, 1 }, + { 2, 2, 3, 1 }, + { 3, 2, 3, 1 }, + { 4, 2, 3, 1 }, + { 1, 3, 3, 1 }, + { 2, 3, 3, 1 }, + { 3, 3, 3, 1 }, + { 4, 3, 3, 1 }, + { 1, 4, 3, 1 }, + { 2, 4, 3, 1 }, + { 3, 4, 3, 1 }, + { 4, 4, 3, 1 }, + { 1, 1, 4, 1 }, + { 2, 1, 4, 1 }, + { 3, 1, 4, 1 }, + { 4, 1, 4, 1 }, + { 1, 2, 4, 1 }, + { 2, 2, 4, 1 }, + { 3, 2, 4, 1 }, + { 4, 2, 4, 1 }, + { 1, 3, 4, 1 }, + { 2, 3, 4, 1 }, + { 3, 3, 4, 1 }, + { 4, 3, 4, 1 }, + { 1, 4, 4, 1 }, + { 2, 4, 4, 1 }, + { 3, 4, 4, 1 }, + { 4, 4, 4, 1 }, + { 1, 1, 1, 2 }, + { 2, 1, 1, 2 }, + { 3, 1, 1, 2 }, + { 4, 1, 1, 2 }, + { 1, 2, 1, 2 }, + { 2, 2, 1, 2 }, + { 3, 2, 1, 2 }, + { 4, 2, 1, 2 }, + { 1, 3, 1, 2 }, + { 2, 3, 1, 2 }, + { 3, 3, 1, 2 }, + { 4, 3, 1, 2 }, + { 1, 4, 1, 2 }, + { 2, 4, 1, 2 }, + { 3, 4, 1, 2 }, + { 4, 4, 1, 2 }, + { 1, 1, 2, 2 }, + { 2, 1, 2, 2 }, + { 3, 1, 2, 2 }, + { 4, 1, 2, 2 }, + { 1, 2, 2, 2 }, + { 2, 2, 2, 2 }, + { 3, 2, 2, 2 }, + { 4, 2, 2, 2 }, + { 1, 3, 2, 2 }, + { 2, 3, 2, 2 }, + { 3, 3, 2, 2 }, + { 4, 3, 2, 2 }, + { 1, 4, 2, 2 }, + { 2, 4, 2, 2 }, + { 3, 4, 2, 2 }, + { 4, 4, 2, 2 }, + { 1, 1, 3, 2 }, + { 2, 1, 3, 2 }, + { 3, 1, 3, 2 }, + { 4, 1, 3, 2 }, + { 1, 2, 3, 2 }, + { 2, 2, 3, 2 }, + { 3, 2, 3, 2 }, + { 4, 2, 3, 2 }, + { 1, 3, 3, 2 }, + { 2, 3, 3, 2 }, + { 3, 3, 3, 2 }, + { 4, 3, 3, 2 }, + { 1, 4, 3, 2 }, + { 2, 4, 3, 2 }, + { 3, 4, 3, 2 }, + { 4, 4, 3, 2 }, + { 1, 1, 4, 2 }, + { 2, 1, 4, 2 }, + { 3, 1, 4, 2 }, + { 4, 1, 4, 2 }, + { 1, 2, 4, 2 }, + { 2, 2, 4, 2 }, + { 3, 2, 4, 2 }, + { 4, 2, 4, 2 }, + { 1, 3, 4, 2 }, + { 2, 3, 4, 2 }, + { 3, 3, 4, 2 }, + { 4, 3, 4, 2 }, + { 1, 4, 4, 2 }, + { 2, 4, 4, 2 }, + { 3, 4, 4, 2 }, + { 4, 4, 4, 2 }, + { 1, 1, 1, 3 }, + { 2, 1, 1, 3 }, + { 3, 1, 1, 3 }, + { 4, 1, 1, 3 }, + { 1, 2, 1, 3 }, + { 2, 2, 1, 3 }, + { 3, 2, 1, 3 }, + { 4, 2, 1, 3 }, + { 1, 3, 1, 3 }, + { 2, 3, 1, 3 }, + { 3, 3, 1, 3 }, + { 4, 3, 1, 3 }, + { 1, 4, 1, 3 }, + { 2, 4, 1, 3 }, + { 3, 4, 1, 3 }, + { 4, 4, 1, 3 }, + { 1, 1, 2, 3 }, + { 2, 1, 2, 3 }, + { 3, 1, 2, 3 }, + { 4, 1, 2, 3 }, + { 1, 2, 2, 3 }, + { 2, 2, 2, 3 }, + { 3, 2, 2, 3 }, + { 4, 2, 2, 3 }, + { 1, 3, 2, 3 }, + { 2, 3, 2, 3 }, + { 3, 3, 2, 3 }, + { 4, 3, 2, 3 }, + { 1, 4, 2, 3 }, + { 2, 4, 2, 3 }, + { 3, 4, 2, 3 }, + { 4, 4, 2, 3 }, + { 1, 1, 3, 3 }, + { 2, 1, 3, 3 }, + { 3, 1, 3, 3 }, + { 4, 1, 3, 3 }, + { 1, 2, 3, 3 }, + { 2, 2, 3, 3 }, + { 3, 2, 3, 3 }, + { 4, 2, 3, 3 }, + { 1, 3, 3, 3 }, + { 2, 3, 3, 3 }, + { 3, 3, 3, 3 }, + { 4, 3, 3, 3 }, + { 1, 4, 3, 3 }, + { 2, 4, 3, 3 }, + { 3, 4, 3, 3 }, + { 4, 4, 3, 3 }, + { 1, 1, 4, 3 }, + { 2, 1, 4, 3 }, + { 3, 1, 4, 3 }, + { 4, 1, 4, 3 }, + { 1, 2, 4, 3 }, + { 2, 2, 4, 3 }, + { 3, 2, 4, 3 }, + { 4, 2, 4, 3 }, + { 1, 3, 4, 3 }, + { 2, 3, 4, 3 }, + { 3, 3, 4, 3 }, + { 4, 3, 4, 3 }, + { 1, 4, 4, 3 }, + { 2, 4, 4, 3 }, + { 3, 4, 4, 3 }, + { 4, 4, 4, 3 }, + { 1, 1, 1, 4 }, + { 2, 1, 1, 4 }, + { 3, 1, 1, 4 }, + { 4, 1, 1, 4 }, + { 1, 2, 1, 4 }, + { 2, 2, 1, 4 }, + { 3, 2, 1, 4 }, + { 4, 2, 1, 4 }, + { 1, 3, 1, 4 }, + { 2, 3, 1, 4 }, + { 3, 3, 1, 4 }, + { 4, 3, 1, 4 }, + { 1, 4, 1, 4 }, + { 2, 4, 1, 4 }, + { 3, 4, 1, 4 }, + { 4, 4, 1, 4 }, + { 1, 1, 2, 4 }, + { 2, 1, 2, 4 }, + { 3, 1, 2, 4 }, + { 4, 1, 2, 4 }, + { 1, 2, 2, 4 }, + { 2, 2, 2, 4 }, + { 3, 2, 2, 4 }, + { 4, 2, 2, 4 }, + { 1, 3, 2, 4 }, + { 2, 3, 2, 4 }, + { 3, 3, 2, 4 }, + { 4, 3, 2, 4 }, + { 1, 4, 2, 4 }, + { 2, 4, 2, 4 }, + { 3, 4, 2, 4 }, + { 4, 4, 2, 4 }, + { 1, 1, 3, 4 }, + { 2, 1, 3, 4 }, + { 3, 1, 3, 4 }, + { 4, 1, 3, 4 }, + { 1, 2, 3, 4 }, + { 2, 2, 3, 4 }, + { 3, 2, 3, 4 }, + { 4, 2, 3, 4 }, + { 1, 3, 3, 4 }, + { 2, 3, 3, 4 }, + { 3, 3, 3, 4 }, + { 4, 3, 3, 4 }, + { 1, 4, 3, 4 }, + { 2, 4, 3, 4 }, + { 3, 4, 3, 4 }, + { 4, 4, 3, 4 }, + { 1, 1, 4, 4 }, + { 2, 1, 4, 4 }, + { 3, 1, 4, 4 }, + { 4, 1, 4, 4 }, + { 1, 2, 4, 4 }, + { 2, 2, 4, 4 }, + { 3, 2, 4, 4 }, + { 4, 2, 4, 4 }, + { 1, 3, 4, 4 }, + { 2, 3, 4, 4 }, + { 3, 3, 4, 4 }, + { 4, 3, 4, 4 }, + { 1, 4, 4, 4 }, + { 2, 4, 4, 4 }, + { 3, 4, 4, 4 }, + { 4, 4, 4, 4 }, +}; + +static dstatement_t swizzle_d_statements[] = { + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0000, 8 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0001, 16 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0002, 24 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0003, 32 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0004, 40 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0005, 48 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0006, 56 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0007, 64 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0008, 72 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0009, 80 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x000a, 88 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x000b, 96 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x000c, 104 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x000d, 112 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x000e, 120 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x000f, 128 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0010, 136 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0011, 144 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0012, 152 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0013, 160 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0014, 168 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0015, 176 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0016, 184 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0017, 192 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0018, 200 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0019, 208 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x001a, 216 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x001b, 224 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x001c, 232 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x001d, 240 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x001e, 248 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x001f, 256 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0020, 264 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0021, 272 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0022, 280 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0023, 288 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0024, 296 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0025, 304 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0026, 312 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0027, 320 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0028, 328 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0029, 336 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x002a, 344 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x002b, 352 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x002c, 360 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x002d, 368 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x002e, 376 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x002f, 384 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0030, 392 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0031, 400 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0032, 408 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0033, 416 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0034, 424 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0035, 432 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0036, 440 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0037, 448 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0038, 456 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0039, 464 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x003a, 472 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x003b, 480 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x003c, 488 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x003d, 496 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x003e, 504 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x003f, 512 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0040, 520 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0041, 528 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0042, 536 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0043, 544 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0044, 552 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0045, 560 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0046, 568 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0047, 576 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0048, 584 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0049, 592 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x004a, 600 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x004b, 608 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x004c, 616 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x004d, 624 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x004e, 632 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x004f, 640 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0050, 648 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0051, 656 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0052, 664 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0053, 672 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0054, 680 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0055, 688 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0056, 696 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0057, 704 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0058, 712 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0059, 720 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x005a, 728 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x005b, 736 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x005c, 744 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x005d, 752 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x005e, 760 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x005f, 768 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0060, 776 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0061, 784 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0062, 792 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0063, 800 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0064, 808 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0065, 816 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0066, 824 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0067, 832 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0068, 840 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0069, 848 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x006a, 856 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x006b, 864 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x006c, 872 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x006d, 880 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x006e, 888 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x006f, 896 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0070, 904 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0071, 912 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0072, 920 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0073, 928 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0074, 936 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0075, 944 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0076, 952 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0077, 960 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0078, 968 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0079, 976 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x007a, 984 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x007b, 992 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x007c, 1000 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x007d, 1008 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x007e, 1016 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x007f, 1024 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0080, 1032 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0081, 1040 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0082, 1048 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0083, 1056 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0084, 1064 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0085, 1072 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0086, 1080 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0087, 1088 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0088, 1096 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0089, 1104 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x008a, 1112 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x008b, 1120 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x008c, 1128 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x008d, 1136 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x008e, 1144 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x008f, 1152 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0090, 1160 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0091, 1168 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0092, 1176 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0093, 1184 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0094, 1192 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0095, 1200 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0096, 1208 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0097, 1216 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0098, 1224 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0099, 1232 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x009a, 1240 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x009b, 1248 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x009c, 1256 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x009d, 1264 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x009e, 1272 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x009f, 1280 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00a0, 1288 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00a1, 1296 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00a2, 1304 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00a3, 1312 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00a4, 1320 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00a5, 1328 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00a6, 1336 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00a7, 1344 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00a8, 1352 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00a9, 1360 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00aa, 1368 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ab, 1376 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ac, 1384 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ad, 1392 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ae, 1400 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00af, 1408 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00b0, 1416 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00b1, 1424 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00b2, 1432 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00b3, 1440 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00b4, 1448 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00b5, 1456 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00b6, 1464 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00b7, 1472 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00b8, 1480 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00b9, 1488 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ba, 1496 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00bb, 1504 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00bc, 1512 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00bd, 1520 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00be, 1528 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00bf, 1536 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00c0, 1544 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00c1, 1552 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00c2, 1560 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00c3, 1568 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00c4, 1576 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00c5, 1584 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00c6, 1592 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00c7, 1600 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00c8, 1608 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00c9, 1616 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ca, 1624 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00cb, 1632 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00cc, 1640 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00cd, 1648 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ce, 1656 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00cf, 1664 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00d0, 1672 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00d1, 1680 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00d2, 1688 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00d3, 1696 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00d4, 1704 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00d5, 1712 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00d6, 1720 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00d7, 1728 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00d8, 1736 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00d9, 1744 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00da, 1752 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00db, 1760 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00dc, 1768 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00dd, 1776 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00de, 1784 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00df, 1792 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e0, 1800 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e1, 1808 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e2, 1816 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e3, 1824 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e4, 1832 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e5, 1840 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e6, 1848 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e7, 1856 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e8, 1864 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e9, 1872 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ea, 1880 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00eb, 1888 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ec, 1896 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ed, 1904 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ee, 1912 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ef, 1920 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00f0, 1928 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00f1, 1936 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00f2, 1944 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00f3, 1952 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00f4, 1960 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00f5, 1968 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00f6, 1976 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00f7, 1984 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00f8, 1992 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00f9, 2000 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00fa, 2008 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00fb, 2016 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00fc, 2024 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00fd, 2032 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00fe, 2040 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00ff, 2048 }, +}; + +static pr_dvec4_t neg_d_init[] = { + { 1, 2, 3, 4 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, +}; + +static pr_dvec4_t neg_d_expect[] = { + { 1, 2, 3, 4 }, + { 1, 2, 3, 4 }, + { -1, 2, 3, 4 }, + { 1, -2, 3, 4 }, + { -1, -2, 3, 4 }, + { 1, 2, -3, 4 }, + { -1, 2, -3, 4 }, + { 1, -2, -3, 4 }, + { -1, -2, -3, 4 }, + { 1, 2, 3, -4 }, + { -1, 2, 3, -4 }, + { 1, -2, 3, -4 }, + { -1, -2, 3, -4 }, + { 1, 2, -3, -4 }, + { -1, 2, -3, -4 }, + { 1, -2, -3, -4 }, + { -1, -2, -3, -4 }, +}; + +static dstatement_t neg_d_statements[] = { + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e4, 8 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x01e4, 16 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x02e4, 24 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x03e4, 32 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x04e4, 40 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x05e4, 48 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x06e4, 56 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x07e4, 64 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x08e4, 72 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x09e4, 80 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0ae4, 88 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0be4, 96 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0ce4, 104 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0de4, 112 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0ee4, 120 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x0fe4, 128 }, +}; + +static pr_dvec4_t zero_d_init[] = { + { 1, 2, 3, 4 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, + { 9, 9, 9, 9 }, +}; + +static pr_dvec4_t zero_d_expect[] = { + { 1, 2, 3, 4 }, + { 1, 2, 3, 4 }, + { 0, 2, 3, 4 }, + { 1, 0, 3, 4 }, + { 0, 0, 3, 4 }, + { 1, 2, 0, 4 }, + { 0, 2, 0, 4 }, + { 1, 0, 0, 4 }, + { 0, 0, 0, 4 }, + { 1, 2, 3, 0 }, + { 0, 2, 3, 0 }, + { 1, 0, 3, 0 }, + { 0, 0, 3, 0 }, + { 1, 2, 0, 0 }, + { 0, 2, 0, 0 }, + { 1, 0, 0, 0 }, + { 0, 0, 0, 0 }, +}; + +static dstatement_t zero_d_statements[] = { + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x00e4, 8 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x10e4, 16 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x20e4, 24 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x30e4, 32 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x40e4, 40 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x50e4, 48 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x60e4, 56 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x70e4, 64 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x80e4, 72 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0x90e4, 80 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0xa0e4, 88 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0xb0e4, 96 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0xc0e4, 104 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0xd0e4, 112 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0xe0e4, 120 }, + { OP(0, 0, 0, OP_SWIZZLE_D), 0, 0xf0e4, 128 }, +}; + +test_t tests[] = { + { + .desc = "swizzle f", + .num_globals = num_globals(swizzle_f_init,swizzle_f_expect), + .num_statements = num_statements(swizzle_f_statements), + .statements = swizzle_f_statements, + .init_globals = (pr_int_t *) swizzle_f_init, + .expect_globals = (pr_int_t *) swizzle_f_expect, + }, + { + .desc = "neg f", + .num_globals = num_globals(neg_f_init,neg_f_expect), + .num_statements = num_statements(neg_f_statements), + .statements = neg_f_statements, + .init_globals = (pr_int_t *) neg_f_init, + .expect_globals = (pr_int_t *) neg_f_expect, + }, + { + .desc = "zero f", + .num_globals = num_globals(zero_f_init,zero_f_expect), + .num_statements = num_statements(zero_f_statements), + .statements = zero_f_statements, + .init_globals = (pr_int_t *) zero_f_init, + .expect_globals = (pr_int_t *) zero_f_expect, + }, + { + .desc = "swizzle d", + .num_globals = num_globals(swizzle_d_init,swizzle_d_expect), + .num_statements = num_statements(swizzle_d_statements), + .statements = swizzle_d_statements, + .init_globals = (pr_int_t *) swizzle_d_init, + .expect_globals = (pr_int_t *) swizzle_d_expect, + }, + { + .desc = "neg d", + .num_globals = num_globals(neg_d_init,neg_d_expect), + .num_statements = num_statements(neg_d_statements), + .statements = neg_d_statements, + .init_globals = (pr_int_t *) neg_d_init, + .expect_globals = (pr_int_t *) neg_d_expect, + }, + { + .desc = "zero d", + .num_globals = num_globals(zero_d_init,zero_d_expect), + .num_statements = num_statements(zero_d_statements), + .statements = zero_d_statements, + .init_globals = (pr_int_t *) zero_d_init, + .expect_globals = (pr_int_t *) zero_d_expect, + }, +}; + +#include "main.c"