[gamecode] Make no-op conversions simple copies

Most useful for 64-bit values as only one instruction is needed to move
the data around rather than two, but could be slightly faster for 32-bit
as the addressing is simpler (needs profiling).
This commit is contained in:
Bill Currie 2022-01-15 15:44:53 +09:00
parent bffcbfc9fc
commit fae432f46e
9 changed files with 133 additions and 38 deletions

View File

@ -85,14 +85,25 @@ def expand_str(width, src, pref=""):
for width in range(4): for width in range(4):
for src_type in range(8): for src_type in range(8):
for dst_type in range(8): for dst_type in range(8):
mode = convert_matrix[src_type][dst_type]
if not mode:
continue
case = case_str(width, src_type, dst_type) case = case_str(width, src_type, dst_type)
cast = cast_str(width, src_type, dst_type) cast = cast_str(width, src_type, dst_type)
src = src_str(width, src_type, dst_type) src = src_str(width, src_type, dst_type)
dst = dst_str(width, src_type, dst_type) dst = dst_str(width, src_type, dst_type)
if mode == 1: mode = convert_matrix[src_type][dst_type]
if mode == 0:
if dst_type & 2 != src_type & 2:
continue
if dst_type & 2:
src = src_str(width, 2, 2)
dst = dst_str(width, 2, 2)
else:
src = src_str(width, 0, 0)
dst = dst_str(width, 0, 0)
if width == 2:
print(f"{case} VectorCopy(&{src},&{dst}); break;")
else:
print(f"{case} {dst} = {src}; break;")
elif mode == 1:
if width == 0: if width == 0:
print(f"{case} {dst} = {cast} {src}; break;") print(f"{case} {dst} = {cast} {src}; break;")
elif width == 2: elif width == 2:

View File

@ -38,11 +38,11 @@ static pr_ivec4_t int_conv_expect[] = {
{ 256, 0, 0x7fffffff, 0}, //ulong { 256, 0, 0x7fffffff, 0}, //ulong
{ ~0, ~0, ~0, 0}, //bool64 { ~0, ~0, ~0, 0}, //bool64
{ 0, ~0, 0, 0}, //bool64 { 0, ~0, 0, 0}, //bool64
{ 0, 0, 0, 0}, // int { 5, -5, 0x80000000, 0x7fffffff}, // int
{ 1, -1, 0x80000000, 0x80000000}, // float undef? { 1, -1, 0x80000000, 0x80000000}, // float undef?
{ 99, 0x80000000, 256, 0x7fffffff}, // long { 99, 0x80000000, 256, 0x7fffffff}, // long
{ 0x80000000, 0x80000000, 1, -1}, // double undef? { 0x80000000, 0x80000000, 1, -1}, // double undef?
{ 0, 0, 0, 0}, // uint { 5, -5, 0x80000000, 0x7fffffff}, // uint
{ 1, 1, 1, 0}, // bool32 { 1, 1, 1, 0}, // bool32
{ 99, 0x80000000, 256, 0x7fffffff}, // ulong { 99, 0x80000000, 256, 0x7fffffff}, // ulong
{ 1, 1, 1, 0}, // bool64 { 1, 1, 1, 0}, // bool64
@ -58,13 +58,15 @@ static dstatement_t int_conv_1_statements[] = {
{ OP(0, 0, 0, OP_BREAK), 0, 0, 0 }, { OP(0, 0, 0, OP_BREAK), 0, 0, 0 },
{ OP(0, 0, 0, OP_WITH), 4, 80, 1 }, { OP(0, 0, 0, OP_WITH), 4, 80, 1 },
{ OP(0, 0, 0, OP_WITH), 4, 81, 2 }, { OP(0, 0, 0, OP_WITH), 4, 81, 2 },
{ OP(1, 1, 1, OP_CONV), 0, 0000, 48 },
{ OP(1, 1, 1, OP_CONV), 4, 0010, 52 }, { OP(1, 1, 1, OP_CONV), 4, 0010, 52 },
{ OP(2, 1, 1, OP_CONV), 8, 0020, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0020, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0030, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0030, 60 },
{ OP(1, 1, 1, OP_CONV), 24, 0040, 64 },
{ OP(1, 1, 1, OP_CONV), 28, 0050, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0050, 68 },
{ OP(2, 1, 1, OP_CONV), 32, 0060, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0060, 72 },
{ OP(2, 1, 1, OP_CONV), 40, 0070, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0070, 76 },
{ OP(1, 1, 1, OP_JUMP_A), -12, 0, 0 }, { OP(1, 1, 1, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t int_conv_2_statements[] = { static dstatement_t int_conv_2_statements[] = {
@ -77,22 +79,28 @@ static dstatement_t int_conv_2_statements[] = {
{ OP(0, 0, 0, OP_BREAK), 0, 0, 0 }, { OP(0, 0, 0, OP_BREAK), 0, 0, 0 },
{ OP(0, 0, 0, OP_WITH), 4, 80, 1 }, { OP(0, 0, 0, OP_WITH), 4, 80, 1 },
{ OP(0, 0, 0, OP_WITH), 4, 81, 2 }, { OP(0, 0, 0, OP_WITH), 4, 81, 2 },
{ OP(1, 1, 1, OP_CONV), 0, 0100, 48 },
{ OP(1, 1, 1, OP_CONV), 4, 0110, 52 }, { OP(1, 1, 1, OP_CONV), 4, 0110, 52 },
{ OP(2, 1, 1, OP_CONV), 8, 0120, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0120, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0130, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0130, 60 },
{ OP(1, 1, 1, OP_CONV), 24, 0140, 64 },
{ OP(1, 1, 1, OP_CONV), 28, 0150, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0150, 68 },
{ OP(2, 1, 1, OP_CONV), 32, 0160, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0160, 72 },
{ OP(2, 1, 1, OP_CONV), 40, 0170, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0170, 76 },
{ OP(1, 1, 1, OP_JUMP_A), -12, 0, 0 }, { OP(1, 1, 1, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t int_conv_3a_statements[] = { static dstatement_t int_conv_3a_statements[] = {
{ OP(1, 1, 1, OP_CONV), 0, 0200, 48 },
{ OP(1, 1, 1, OP_CONV), 3, 0200, 51 },
{ OP(1, 1, 1, OP_CONV), 4, 0210, 52 }, { OP(1, 1, 1, OP_CONV), 4, 0210, 52 },
{ OP(1, 1, 1, OP_CONV), 7, 0010, 55 }, { OP(1, 1, 1, OP_CONV), 7, 0010, 55 },
{ OP(2, 1, 1, OP_CONV), 8, 0220, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0220, 56 },
{ OP(2, 1, 1, OP_CONV), 14, 0020, 59 }, { OP(2, 1, 1, OP_CONV), 14, 0020, 59 },
{ OP(2, 1, 1, OP_CONV), 16, 0230, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0230, 60 },
{ OP(2, 1, 1, OP_CONV), 22, 0030, 63 }, { OP(2, 1, 1, OP_CONV), 22, 0030, 63 },
{ OP(1, 1, 1, OP_CONV), 24, 0240, 64 },
{ OP(1, 1, 1, OP_CONV), 27, 0240, 67 },
{ OP(1, 1, 1, OP_CONV), 28, 0250, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0250, 68 },
{ OP(1, 1, 1, OP_CONV), 31, 0050, 71 }, { OP(1, 1, 1, OP_CONV), 31, 0050, 71 },
{ OP(2, 1, 1, OP_CONV), 32, 0260, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0260, 72 },
@ -102,12 +110,16 @@ static dstatement_t int_conv_3a_statements[] = {
}; };
static dstatement_t int_conv_3b_statements[] = { static dstatement_t int_conv_3b_statements[] = {
{ OP(1, 1, 1, OP_CONV), 0, 0200, 48 },
{ OP(1, 1, 1, OP_CONV), 1, 0200, 49 },
{ OP(1, 1, 1, OP_CONV), 4, 0010, 52 }, { OP(1, 1, 1, OP_CONV), 4, 0010, 52 },
{ OP(1, 1, 1, OP_CONV), 5, 0210, 53 }, { OP(1, 1, 1, OP_CONV), 5, 0210, 53 },
{ OP(2, 1, 1, OP_CONV), 8, 0020, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0020, 56 },
{ OP(2, 1, 1, OP_CONV), 10, 0220, 57 }, { OP(2, 1, 1, OP_CONV), 10, 0220, 57 },
{ OP(2, 1, 1, OP_CONV), 16, 0030, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0030, 60 },
{ OP(2, 1, 1, OP_CONV), 18, 0230, 61 }, { OP(2, 1, 1, OP_CONV), 18, 0230, 61 },
{ OP(1, 1, 1, OP_CONV), 24, 0240, 64 },
{ OP(1, 1, 1, OP_CONV), 25, 0240, 65 },
{ OP(1, 1, 1, OP_CONV), 28, 0050, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0050, 68 },
{ OP(1, 1, 1, OP_CONV), 29, 0250, 69 }, { OP(1, 1, 1, OP_CONV), 29, 0250, 69 },
{ OP(2, 1, 1, OP_CONV), 32, 0060, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0060, 72 },
@ -117,12 +129,14 @@ static dstatement_t int_conv_3b_statements[] = {
}; };
static dstatement_t int_conv_4_statements[] = { static dstatement_t int_conv_4_statements[] = {
{ OP(1, 1, 1, OP_CONV), 0, 0300, 48 },
{ OP(1, 1, 1, OP_CONV), 4, 0310, 52 }, { OP(1, 1, 1, OP_CONV), 4, 0310, 52 },
{ OP(2, 1, 1, OP_CONV), 8, 0320, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0320, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0330, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0330, 60 },
{ OP(1, 1, 1, OP_CONV), 28, 0350, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0350, 68 },
{ OP(2, 1, 1, OP_CONV), 32, 0360, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0360, 72 },
{ OP(2, 1, 1, OP_CONV), 40, 0370, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0370, 76 },
{ OP(1, 1, 1, OP_CONV), 24, 0340, 64 },
}; };
test_t tests[] = { test_t tests[] = {

View File

@ -39,7 +39,7 @@ static pr_ivec4_t float_conv_expect[] = {
{ ~0, ~0, ~0, 0}, //bool64 { ~0, ~0, ~0, 0}, //bool64
{ 0, ~0, 0, 0}, //bool64 { 0, ~0, 0, 0}, //bool64
{ 0x40a00000, 0xc0a00000, 0xcf000000, 0x4f000000}, // int { 0x40a00000, 0xc0a00000, 0xcf000000, 0x4f000000}, // int
{ 0, 0, 0, 0}, // float { 0x3fc00000, 0xbfc00000, 0x7149f2ca, 0xf149f2ca}, // float
{ 0xdf000000, 0x52c70000, 0x43800000, 0x4f000000}, // long { 0xdf000000, 0x52c70000, 0x43800000, 0x4f000000}, // long
{ 0x7149f2ca, 0xf149f2ca, 0x3fc00000, 0xbfc00000}, // double { 0x7149f2ca, 0xf149f2ca, 0x3fc00000, 0xbfc00000}, // double
{ 0x40a00000, 0x4f800000, 0x4f000000, 0x4f000000}, // uint { 0x40a00000, 0x4f800000, 0x4f000000, 0x4f000000}, // uint
@ -59,13 +59,14 @@ static dstatement_t float_conv_1_statements[] = {
{ OP(0, 0, 0, OP_WITH), 4, 80, 1 }, { OP(0, 0, 0, OP_WITH), 4, 80, 1 },
{ OP(0, 0, 0, OP_WITH), 4, 81, 2 }, { OP(0, 0, 0, OP_WITH), 4, 81, 2 },
{ OP(1, 1, 1, OP_CONV), 0, 0001, 48 }, { OP(1, 1, 1, OP_CONV), 0, 0001, 48 },
{ OP(1, 1, 1, OP_CONV), 4, 0011, 52 },
{ OP(2, 1, 1, OP_CONV), 8, 0021, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0021, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0031, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0031, 60 },
{ OP(1, 1, 1, OP_CONV), 24, 0041, 64 }, { OP(1, 1, 1, OP_CONV), 24, 0041, 64 },
{ OP(1, 1, 1, OP_CONV), 28, 0051, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0051, 68 },
{ OP(2, 1, 1, OP_CONV), 32, 0061, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0061, 72 },
{ OP(2, 1, 1, OP_CONV), 40, 0071, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0071, 76 },
{ OP(1, 1, 1, OP_JUMP_A), -13, 0, 0 }, { OP(1, 1, 1, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t float_conv_2_statements[] = { static dstatement_t float_conv_2_statements[] = {
@ -79,18 +80,21 @@ static dstatement_t float_conv_2_statements[] = {
{ OP(0, 0, 0, OP_WITH), 4, 80, 1 }, { OP(0, 0, 0, OP_WITH), 4, 80, 1 },
{ OP(0, 0, 0, OP_WITH), 4, 81, 2 }, { OP(0, 0, 0, OP_WITH), 4, 81, 2 },
{ OP(1, 1, 1, OP_CONV), 0, 0101, 48 }, { OP(1, 1, 1, OP_CONV), 0, 0101, 48 },
{ OP(1, 1, 1, OP_CONV), 4, 0111, 52 },
{ OP(2, 1, 1, OP_CONV), 8, 0121, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0121, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0131, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0131, 60 },
{ OP(1, 1, 1, OP_CONV), 24, 0141, 64 }, { OP(1, 1, 1, OP_CONV), 24, 0141, 64 },
{ OP(1, 1, 1, OP_CONV), 28, 0151, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0151, 68 },
{ OP(2, 1, 1, OP_CONV), 32, 0161, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0161, 72 },
{ OP(2, 1, 1, OP_CONV), 40, 0171, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0171, 76 },
{ OP(1, 1, 1, OP_JUMP_A), -13, 0, 0 }, { OP(1, 1, 1, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t float_conv_3a_statements[] = { static dstatement_t float_conv_3a_statements[] = {
{ OP(1, 1, 1, OP_CONV), 0, 0201, 48 }, { OP(1, 1, 1, OP_CONV), 0, 0201, 48 },
{ OP(1, 1, 1, OP_CONV), 3, 0001, 51 }, { OP(1, 1, 1, OP_CONV), 3, 0001, 51 },
{ OP(1, 1, 1, OP_CONV), 4, 0211, 52 },
{ OP(1, 1, 1, OP_CONV), 7, 0011, 55 },
{ OP(2, 1, 1, OP_CONV), 8, 0221, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0221, 56 },
{ OP(2, 1, 1, OP_CONV), 14, 0021, 59 }, { OP(2, 1, 1, OP_CONV), 14, 0021, 59 },
{ OP(2, 1, 1, OP_CONV), 16, 0231, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0231, 60 },
@ -108,6 +112,8 @@ static dstatement_t float_conv_3a_statements[] = {
static dstatement_t float_conv_3b_statements[] = { static dstatement_t float_conv_3b_statements[] = {
{ OP(1, 1, 1, OP_CONV), 0, 0001, 48 }, { OP(1, 1, 1, OP_CONV), 0, 0001, 48 },
{ OP(1, 1, 1, OP_CONV), 1, 0201, 49 }, { OP(1, 1, 1, OP_CONV), 1, 0201, 49 },
{ OP(1, 1, 1, OP_CONV), 4, 0011, 52 },
{ OP(1, 1, 1, OP_CONV), 5, 0211, 53 },
{ OP(2, 1, 1, OP_CONV), 8, 0021, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0021, 56 },
{ OP(2, 1, 1, OP_CONV), 10, 0221, 57 }, { OP(2, 1, 1, OP_CONV), 10, 0221, 57 },
{ OP(2, 1, 1, OP_CONV), 16, 0031, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0031, 60 },
@ -124,6 +130,7 @@ static dstatement_t float_conv_3b_statements[] = {
static dstatement_t float_conv_4_statements[] = { static dstatement_t float_conv_4_statements[] = {
{ OP(1, 1, 1, OP_CONV), 0, 0301, 48 }, { OP(1, 1, 1, OP_CONV), 0, 0301, 48 },
{ OP(1, 1, 1, OP_CONV), 4, 0311, 52 },
{ OP(2, 1, 1, OP_CONV), 8, 0321, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0321, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0331, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0331, 60 },
{ OP(1, 1, 1, OP_CONV), 24, 0341, 64 }, { OP(1, 1, 1, OP_CONV), 24, 0341, 64 },

View File

@ -50,16 +50,16 @@ static pr_ivec4_t long_conv_expect[] = {
{ 0x80000000, 0xffffffff, 0x7fffffff, 0}, { 0x80000000, 0xffffffff, 0x7fffffff, 0},
{ 1, 0, -1, -1}, // float { 1, 0, -1, -1}, // float
{ 0, 0x80000000, 0, 0x80000000}, // undef? { 0, 0x80000000, 0, 0x80000000}, // undef?
{ 0, 0, 0, 0}, // long { 99, 0x80000000, 0x80000000, 99}, // long
{ 0, 0, 0, 0}, { 256, 0, 0x7fffffff, 0},
{ 0, 0x80000000, 0, 0x80000000}, // double undef? { 0, 0x80000000, 0, 0x80000000}, // double undef?
{ 1, 0, -1, -1}, { 1, 0, -1, -1},
{ 5, 0, -5, 0}, // uint { 5, 0, -5, 0}, // uint
{ 0x80000000, 0, 0x7fffffff, 0}, { 0x80000000, 0, 0x7fffffff, 0},
{ 1, 0, 1, 0}, // bool32 { 1, 0, 1, 0}, // bool32
{ 1, 0, 0, 0}, { 1, 0, 0, 0},
{ 0, 0, 0, 0}, // ulong { 99, 0x80000000, 0x80000000, 99}, // ulong
{ 0, 0, 0, 0}, { 256, 0, 0x7fffffff, 0},
{ 1, 0, 1, 0}, // bool64 { 1, 0, 1, 0}, // bool64
{ 1, 0, 0, 0}, { 1, 0, 0, 0},
}; };
@ -76,11 +76,13 @@ static dstatement_t long_conv_1_statements[] = {
{ OP(0, 0, 0, OP_WITH), 4, 113, 2 }, { OP(0, 0, 0, OP_WITH), 4, 113, 2 },
{ OP(1, 1, 2, OP_CONV), 0, 0002, 48 }, { OP(1, 1, 2, OP_CONV), 0, 0002, 48 },
{ OP(1, 1, 2, OP_CONV), 4, 0012, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0012, 56 },
{ OP(2, 1, 2, OP_CONV), 8, 0022, 64 },
{ OP(2, 1, 2, OP_CONV), 16, 0032, 72 }, { OP(2, 1, 2, OP_CONV), 16, 0032, 72 },
{ OP(1, 1, 2, OP_CONV), 24, 0042, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0042, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0052, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0052, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0062, 96 },
{ OP(2, 1, 2, OP_CONV), 40, 0072, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0072, 104 },
{ OP(0, 0, 0, OP_JUMP_A), -12, 0, 0 }, { OP(0, 0, 0, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t long_conv_2_statements[] = { static dstatement_t long_conv_2_statements[] = {
@ -95,11 +97,13 @@ static dstatement_t long_conv_2_statements[] = {
{ OP(0, 0, 0, OP_WITH), 4, 113, 2 }, { OP(0, 0, 0, OP_WITH), 4, 113, 2 },
{ OP(1, 1, 2, OP_CONV), 0, 0102, 48 }, { OP(1, 1, 2, OP_CONV), 0, 0102, 48 },
{ OP(1, 1, 2, OP_CONV), 4, 0112, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0112, 56 },
{ OP(2, 1, 2, OP_CONV), 8, 0122, 64 },
{ OP(2, 1, 2, OP_CONV), 16, 0132, 72 }, { OP(2, 1, 2, OP_CONV), 16, 0132, 72 },
{ OP(1, 1, 2, OP_CONV), 24, 0142, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0142, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0152, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0152, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0162, 96 },
{ OP(2, 1, 2, OP_CONV), 40, 0172, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0172, 104 },
{ OP(0, 0, 0, OP_JUMP_A), -12, 0, 0 }, { OP(0, 0, 0, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t long_conv_3a_statements[] = { static dstatement_t long_conv_3a_statements[] = {
@ -107,12 +111,16 @@ static dstatement_t long_conv_3a_statements[] = {
{ OP(1, 1, 2, OP_CONV), 3, 0002, 54 }, { OP(1, 1, 2, OP_CONV), 3, 0002, 54 },
{ OP(1, 1, 2, OP_CONV), 4, 0212, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0212, 56 },
{ OP(1, 1, 2, OP_CONV), 7, 0012, 62 }, { OP(1, 1, 2, OP_CONV), 7, 0012, 62 },
{ OP(2, 1, 2, OP_CONV), 8, 0222, 64 },
{ OP(2, 1, 2, OP_CONV), 14, 0022, 70 },
{ OP(2, 1, 2, OP_CONV), 16, 0232, 72 }, { OP(2, 1, 2, OP_CONV), 16, 0232, 72 },
{ OP(2, 1, 2, OP_CONV), 22, 0032, 78 }, { OP(2, 1, 2, OP_CONV), 22, 0032, 78 },
{ OP(1, 1, 2, OP_CONV), 24, 0242, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0242, 80 },
{ OP(1, 1, 2, OP_CONV), 27, 0042, 86 }, { OP(1, 1, 2, OP_CONV), 27, 0042, 86 },
{ OP(1, 1, 2, OP_CONV), 28, 0252, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0252, 88 },
{ OP(1, 1, 2, OP_CONV), 31, 0052, 94 }, { OP(1, 1, 2, OP_CONV), 31, 0052, 94 },
{ OP(2, 1, 2, OP_CONV), 32, 0262, 96 },
{ OP(2, 1, 2, OP_CONV), 38, 0062, 102 },
{ OP(2, 1, 2, OP_CONV), 40, 0272, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0272, 104 },
{ OP(2, 1, 2, OP_CONV), 46, 0072, 110 }, { OP(2, 1, 2, OP_CONV), 46, 0072, 110 },
}; };
@ -122,12 +130,16 @@ static dstatement_t long_conv_3b_statements[] = {
{ OP(1, 1, 2, OP_CONV), 1, 0202, 50 }, { OP(1, 1, 2, OP_CONV), 1, 0202, 50 },
{ OP(1, 1, 2, OP_CONV), 4, 0012, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0012, 56 },
{ OP(1, 1, 2, OP_CONV), 5, 0212, 58 }, { OP(1, 1, 2, OP_CONV), 5, 0212, 58 },
{ OP(2, 1, 2, OP_CONV), 8, 0022, 64 },
{ OP(2, 1, 2, OP_CONV), 10, 0222, 66 },
{ OP(2, 1, 2, OP_CONV), 16, 0032, 72 }, { OP(2, 1, 2, OP_CONV), 16, 0032, 72 },
{ OP(2, 1, 2, OP_CONV), 18, 0232, 74 }, { OP(2, 1, 2, OP_CONV), 18, 0232, 74 },
{ OP(1, 1, 2, OP_CONV), 24, 0042, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0042, 80 },
{ OP(1, 1, 2, OP_CONV), 25, 0242, 82 }, { OP(1, 1, 2, OP_CONV), 25, 0242, 82 },
{ OP(1, 1, 2, OP_CONV), 28, 0052, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0052, 88 },
{ OP(1, 1, 2, OP_CONV), 29, 0252, 90 }, { OP(1, 1, 2, OP_CONV), 29, 0252, 90 },
{ OP(2, 1, 2, OP_CONV), 32, 0062, 96 },
{ OP(2, 1, 2, OP_CONV), 34, 0262, 98 },
{ OP(2, 1, 2, OP_CONV), 40, 0072, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0072, 104 },
{ OP(2, 1, 2, OP_CONV), 42, 0272, 106 }, { OP(2, 1, 2, OP_CONV), 42, 0272, 106 },
}; };
@ -135,9 +147,11 @@ static dstatement_t long_conv_3b_statements[] = {
static dstatement_t long_conv_4_statements[] = { static dstatement_t long_conv_4_statements[] = {
{ OP(1, 1, 2, OP_CONV), 0, 0302, 48 }, { OP(1, 1, 2, OP_CONV), 0, 0302, 48 },
{ OP(1, 1, 2, OP_CONV), 4, 0312, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0312, 56 },
{ OP(2, 1, 2, OP_CONV), 8, 0322, 64 },
{ OP(2, 1, 2, OP_CONV), 16, 0332, 72 }, { OP(2, 1, 2, OP_CONV), 16, 0332, 72 },
{ OP(1, 1, 2, OP_CONV), 24, 0342, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0342, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0352, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0352, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0362, 96 },
{ OP(2, 1, 2, OP_CONV), 40, 0372, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0372, 104 },
}; };

View File

@ -52,8 +52,8 @@ static pr_ivec4_t double_conv_expect[] = {
{ 0x40000000, 0x46293e59, 0x40000000, 0xc6293e59}, { 0x40000000, 0x46293e59, 0x40000000, 0xc6293e59},
{ 0x00000000, 0xc3e00000, 0x00000000, 0x4258e000}, // long { 0x00000000, 0xc3e00000, 0x00000000, 0x4258e000}, // long
{ 0x00000000, 0x40700000, 0xffc00000, 0x41dfffff}, { 0x00000000, 0x40700000, 0xffc00000, 0x41dfffff},
{ 0, 0, 0, 0}, // double { 0x39a08cea, 0x46293e59, 0x39a08cea, 0xc6293e59}, // double
{ 0, 0, 0, 0}, { 0, 0x3ff80000, 0, 0xbff80000},
{ 0x00000000, 0x40140000, 0xff600000, 0x41efffff}, // uint { 0x00000000, 0x40140000, 0xff600000, 0x41efffff}, // uint
{ 0x00000000, 0x41e00000, 0xffc00000, 0x41dfffff}, { 0x00000000, 0x41e00000, 0xffc00000, 0x41dfffff},
{ 0x00000000, 0x3ff00000, 0x00000000, 0x3ff00000}, // bool32 { 0x00000000, 0x3ff00000, 0x00000000, 0x3ff00000}, // bool32
@ -77,11 +77,12 @@ static dstatement_t double_conv_1_statements[] = {
{ OP(1, 1, 2, OP_CONV), 0, 0003, 48 }, { OP(1, 1, 2, OP_CONV), 0, 0003, 48 },
{ OP(1, 1, 2, OP_CONV), 4, 0013, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0013, 56 },
{ OP(2, 1, 2, OP_CONV), 8, 0023, 64 }, { OP(2, 1, 2, OP_CONV), 8, 0023, 64 },
{ OP(2, 1, 2, OP_CONV), 16, 0033, 72 },
{ OP(1, 1, 2, OP_CONV), 24, 0043, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0043, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0053, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0053, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0063, 96 }, { OP(2, 1, 2, OP_CONV), 32, 0063, 96 },
{ OP(2, 1, 2, OP_CONV), 40, 0073, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0073, 104 },
{ OP(0, 0, 0, OP_JUMP_A), -13, 0, 0 }, { OP(0, 0, 0, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t double_conv_2_statements[] = { static dstatement_t double_conv_2_statements[] = {
@ -97,11 +98,12 @@ static dstatement_t double_conv_2_statements[] = {
{ OP(1, 1, 2, OP_CONV), 0, 0103, 48 }, { OP(1, 1, 2, OP_CONV), 0, 0103, 48 },
{ OP(1, 1, 2, OP_CONV), 4, 0113, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0113, 56 },
{ OP(2, 1, 2, OP_CONV), 8, 0123, 64 }, { OP(2, 1, 2, OP_CONV), 8, 0123, 64 },
{ OP(2, 1, 2, OP_CONV), 16, 0133, 72 },
{ OP(1, 1, 2, OP_CONV), 24, 0143, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0143, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0153, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0153, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0163, 96 }, { OP(2, 1, 2, OP_CONV), 32, 0163, 96 },
{ OP(2, 1, 2, OP_CONV), 40, 0173, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0173, 104 },
{ OP(0, 0, 0, OP_JUMP_A), -13, 0, 0 }, { OP(0, 0, 0, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t double_conv_3a_statements[] = { static dstatement_t double_conv_3a_statements[] = {
@ -111,6 +113,8 @@ static dstatement_t double_conv_3a_statements[] = {
{ OP(1, 1, 2, OP_CONV), 7, 0013, 62 }, { OP(1, 1, 2, OP_CONV), 7, 0013, 62 },
{ OP(2, 1, 2, OP_CONV), 8, 0223, 64 }, { OP(2, 1, 2, OP_CONV), 8, 0223, 64 },
{ OP(2, 1, 2, OP_CONV), 14, 0023, 70 }, { OP(2, 1, 2, OP_CONV), 14, 0023, 70 },
{ OP(2, 1, 2, OP_CONV), 16, 0233, 72 },
{ OP(2, 1, 2, OP_CONV), 22, 0033, 78 },
{ OP(1, 1, 2, OP_CONV), 24, 0243, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0243, 80 },
{ OP(1, 1, 2, OP_CONV), 27, 0043, 86 }, { OP(1, 1, 2, OP_CONV), 27, 0043, 86 },
{ OP(1, 1, 2, OP_CONV), 28, 0253, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0253, 88 },
@ -128,6 +132,8 @@ static dstatement_t double_conv_3b_statements[] = {
{ OP(1, 1, 2, OP_CONV), 5, 0213, 58 }, { OP(1, 1, 2, OP_CONV), 5, 0213, 58 },
{ OP(2, 1, 2, OP_CONV), 8, 0023, 64 }, { OP(2, 1, 2, OP_CONV), 8, 0023, 64 },
{ OP(2, 1, 2, OP_CONV), 10, 0223, 66 }, { OP(2, 1, 2, OP_CONV), 10, 0223, 66 },
{ OP(2, 1, 2, OP_CONV), 16, 0033, 72 },
{ OP(2, 1, 2, OP_CONV), 18, 0233, 74 },
{ OP(1, 1, 2, OP_CONV), 24, 0043, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0043, 80 },
{ OP(1, 1, 2, OP_CONV), 25, 0243, 82 }, { OP(1, 1, 2, OP_CONV), 25, 0243, 82 },
{ OP(1, 1, 2, OP_CONV), 28, 0053, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0053, 88 },
@ -142,6 +148,7 @@ static dstatement_t double_conv_4_statements[] = {
{ OP(1, 1, 2, OP_CONV), 0, 0303, 48 }, { OP(1, 1, 2, OP_CONV), 0, 0303, 48 },
{ OP(1, 1, 2, OP_CONV), 4, 0313, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0313, 56 },
{ OP(2, 1, 2, OP_CONV), 8, 0323, 64 }, { OP(2, 1, 2, OP_CONV), 8, 0323, 64 },
{ OP(2, 1, 2, OP_CONV), 16, 0333, 72 },
{ OP(1, 1, 2, OP_CONV), 24, 0343, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0343, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0353, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0353, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0363, 96 }, { OP(2, 1, 2, OP_CONV), 32, 0363, 96 },

View File

@ -38,11 +38,11 @@ static pr_ivec4_t uint_conv_expect[] = {
{ 256, 0, 0x7fffffff, 0}, //ulong { 256, 0, 0x7fffffff, 0}, //ulong
{ ~0, ~0, ~0, 0}, //bool64 { ~0, ~0, ~0, 0}, //bool64
{ 0, ~0, 0, 0}, //bool64 { 0, ~0, 0, 0}, //bool64
{ 0, 0, 0, 0}, // int { 5, -5, 0x80000000, 0x7fffffff}, // int
{ 1, 0xffffffff, 0, 0}, // float undef? { 1, 0xffffffff, 0, 0}, // float undef?
{ 99, 0x80000000, 256, 0x7fffffff}, // long { 99, 0x80000000, 256, 0x7fffffff}, // long
{ 0, 0, 1, 0xffffffff}, // double undef? { 0, 0, 1, 0xffffffff}, // double undef?
{ 0, 0, 0, 0}, // uint { 5, -5, 0x80000000, 0x7fffffff}, // uint
{ 1, 1, 1, 0}, // bool32 { 1, 1, 1, 0}, // bool32
{ 99, 0x80000000, 256, 0x7fffffff}, // ulong { 99, 0x80000000, 256, 0x7fffffff}, // ulong
{ 1, 1, 1, 0}, // bool64 { 1, 1, 1, 0}, // bool64
@ -58,13 +58,15 @@ static dstatement_t uint_conv_1_statements[] = {
{ OP(0, 0, 0, OP_BREAK), 0, 0, 0 }, { OP(0, 0, 0, OP_BREAK), 0, 0, 0 },
{ OP(0, 0, 0, OP_WITH), 4, 80, 1 }, { OP(0, 0, 0, OP_WITH), 4, 80, 1 },
{ OP(0, 0, 0, OP_WITH), 4, 81, 2 }, { OP(0, 0, 0, OP_WITH), 4, 81, 2 },
{ OP(1, 1, 1, OP_CONV), 0, 0004, 48 },
{ OP(1, 1, 1, OP_CONV), 4, 0014, 52 }, { OP(1, 1, 1, OP_CONV), 4, 0014, 52 },
{ OP(2, 1, 1, OP_CONV), 8, 0024, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0024, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0034, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0034, 60 },
{ OP(1, 1, 1, OP_CONV), 24, 0044, 64 },
{ OP(1, 1, 1, OP_CONV), 28, 0054, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0054, 68 },
{ OP(2, 1, 1, OP_CONV), 32, 0064, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0064, 72 },
{ OP(2, 1, 1, OP_CONV), 40, 0074, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0074, 76 },
{ OP(1, 1, 1, OP_JUMP_A), -12, 0, 0 }, { OP(1, 1, 1, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t uint_conv_2_statements[] = { static dstatement_t uint_conv_2_statements[] = {
@ -77,22 +79,28 @@ static dstatement_t uint_conv_2_statements[] = {
{ OP(0, 0, 0, OP_BREAK), 0, 0, 0 }, { OP(0, 0, 0, OP_BREAK), 0, 0, 0 },
{ OP(0, 0, 0, OP_WITH), 4, 80, 1 }, { OP(0, 0, 0, OP_WITH), 4, 80, 1 },
{ OP(0, 0, 0, OP_WITH), 4, 81, 2 }, { OP(0, 0, 0, OP_WITH), 4, 81, 2 },
{ OP(1, 1, 1, OP_CONV), 0, 0104, 48 },
{ OP(1, 1, 1, OP_CONV), 4, 0114, 52 }, { OP(1, 1, 1, OP_CONV), 4, 0114, 52 },
{ OP(2, 1, 1, OP_CONV), 8, 0124, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0124, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0134, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0134, 60 },
{ OP(1, 1, 1, OP_CONV), 24, 0144, 64 },
{ OP(1, 1, 1, OP_CONV), 28, 0154, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0154, 68 },
{ OP(2, 1, 1, OP_CONV), 32, 0164, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0164, 72 },
{ OP(2, 1, 1, OP_CONV), 40, 0174, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0174, 76 },
{ OP(1, 1, 1, OP_JUMP_A), -12, 0, 0 }, { OP(1, 1, 1, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t uint_conv_3a_statements[] = { static dstatement_t uint_conv_3a_statements[] = {
{ OP(1, 1, 1, OP_CONV), 0, 0204, 48 },
{ OP(1, 1, 1, OP_CONV), 3, 0004, 51 },
{ OP(1, 1, 1, OP_CONV), 4, 0214, 52 }, { OP(1, 1, 1, OP_CONV), 4, 0214, 52 },
{ OP(1, 1, 1, OP_CONV), 7, 0014, 55 }, { OP(1, 1, 1, OP_CONV), 7, 0014, 55 },
{ OP(2, 1, 1, OP_CONV), 8, 0224, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0224, 56 },
{ OP(2, 1, 1, OP_CONV), 14, 0024, 59 }, { OP(2, 1, 1, OP_CONV), 14, 0024, 59 },
{ OP(2, 1, 1, OP_CONV), 16, 0234, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0234, 60 },
{ OP(2, 1, 1, OP_CONV), 22, 0034, 63 }, { OP(2, 1, 1, OP_CONV), 22, 0034, 63 },
{ OP(1, 1, 1, OP_CONV), 24, 0244, 64 },
{ OP(1, 1, 1, OP_CONV), 27, 0044, 67 },
{ OP(1, 1, 1, OP_CONV), 28, 0254, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0254, 68 },
{ OP(1, 1, 1, OP_CONV), 31, 0054, 71 }, { OP(1, 1, 1, OP_CONV), 31, 0054, 71 },
{ OP(2, 1, 1, OP_CONV), 32, 0264, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0264, 72 },
@ -102,12 +110,16 @@ static dstatement_t uint_conv_3a_statements[] = {
}; };
static dstatement_t uint_conv_3b_statements[] = { static dstatement_t uint_conv_3b_statements[] = {
{ OP(1, 1, 1, OP_CONV), 0, 0004, 48 },
{ OP(1, 1, 1, OP_CONV), 1, 0204, 49 },
{ OP(1, 1, 1, OP_CONV), 4, 0014, 52 }, { OP(1, 1, 1, OP_CONV), 4, 0014, 52 },
{ OP(1, 1, 1, OP_CONV), 5, 0214, 53 }, { OP(1, 1, 1, OP_CONV), 5, 0214, 53 },
{ OP(2, 1, 1, OP_CONV), 8, 0024, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0024, 56 },
{ OP(2, 1, 1, OP_CONV), 10, 0224, 57 }, { OP(2, 1, 1, OP_CONV), 10, 0224, 57 },
{ OP(2, 1, 1, OP_CONV), 16, 0034, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0034, 60 },
{ OP(2, 1, 1, OP_CONV), 18, 0234, 61 }, { OP(2, 1, 1, OP_CONV), 18, 0234, 61 },
{ OP(1, 1, 1, OP_CONV), 24, 0044, 64 },
{ OP(1, 1, 1, OP_CONV), 25, 0244, 65 },
{ OP(1, 1, 1, OP_CONV), 28, 0054, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0054, 68 },
{ OP(1, 1, 1, OP_CONV), 29, 0254, 69 }, { OP(1, 1, 1, OP_CONV), 29, 0254, 69 },
{ OP(2, 1, 1, OP_CONV), 32, 0064, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0064, 72 },
@ -117,9 +129,11 @@ static dstatement_t uint_conv_3b_statements[] = {
}; };
static dstatement_t uint_conv_4_statements[] = { static dstatement_t uint_conv_4_statements[] = {
{ OP(1, 1, 1, OP_CONV), 0, 0304, 48 },
{ OP(1, 1, 1, OP_CONV), 4, 0314, 52 }, { OP(1, 1, 1, OP_CONV), 4, 0314, 52 },
{ OP(2, 1, 1, OP_CONV), 8, 0324, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0324, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0334, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0334, 60 },
{ OP(1, 1, 1, OP_CONV), 24, 0344, 64 },
{ OP(1, 1, 1, OP_CONV), 28, 0354, 68 }, { OP(1, 1, 1, OP_CONV), 28, 0354, 68 },
{ OP(2, 1, 1, OP_CONV), 32, 0364, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0364, 72 },
{ OP(2, 1, 1, OP_CONV), 40, 0374, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0374, 76 },

View File

@ -43,7 +43,7 @@ static pr_ivec4_t bool32_conv_expect[] = {
{ -1, -1, -1, -1}, // long { -1, -1, -1, -1}, // long
{ -1, -1, -1, -1}, // double { -1, -1, -1, -1}, // double
{ -1, -1, -1, -1}, // uint { -1, -1, -1, -1}, // uint
{ 0, 0, 0, 0}, // bool32 { ~0, 1, 0x80000000, 0}, // bool32
{ -1, -1, -1, -1}, // ulong { -1, -1, -1, -1}, // ulong
{ -1, -1, -1, 0}, // bool64 { -1, -1, -1, 0}, // bool64
}; };
@ -63,9 +63,10 @@ static dstatement_t bool32_conv_1_statements[] = {
{ OP(2, 1, 1, OP_CONV), 8, 0025, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0025, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0035, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0035, 60 },
{ OP(1, 1, 1, OP_CONV), 24, 0045, 64 }, { OP(1, 1, 1, OP_CONV), 24, 0045, 64 },
{ OP(1, 1, 1, OP_CONV), 28, 0055, 68 },
{ OP(2, 1, 1, OP_CONV), 32, 0065, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0065, 72 },
{ OP(2, 1, 1, OP_CONV), 40, 0075, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0075, 76 },
{ OP(1, 1, 1, OP_JUMP_A), -13, 0, 0 }, { OP(1, 1, 1, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t bool32_conv_2_statements[] = { static dstatement_t bool32_conv_2_statements[] = {
@ -83,9 +84,10 @@ static dstatement_t bool32_conv_2_statements[] = {
{ OP(2, 1, 1, OP_CONV), 8, 0125, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0125, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0135, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0135, 60 },
{ OP(1, 1, 1, OP_CONV), 24, 0145, 64 }, { OP(1, 1, 1, OP_CONV), 24, 0145, 64 },
{ OP(1, 1, 1, OP_CONV), 28, 0155, 68 },
{ OP(2, 1, 1, OP_CONV), 32, 0165, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0165, 72 },
{ OP(2, 1, 1, OP_CONV), 40, 0175, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0175, 76 },
{ OP(1, 1, 1, OP_JUMP_A), -13, 0, 0 }, { OP(1, 1, 1, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t bool32_conv_3a_statements[] = { static dstatement_t bool32_conv_3a_statements[] = {
@ -99,6 +101,8 @@ static dstatement_t bool32_conv_3a_statements[] = {
{ OP(2, 1, 1, OP_CONV), 22, 0035, 63 }, { OP(2, 1, 1, OP_CONV), 22, 0035, 63 },
{ OP(1, 1, 1, OP_CONV), 24, 0245, 64 }, { OP(1, 1, 1, OP_CONV), 24, 0245, 64 },
{ OP(1, 1, 1, OP_CONV), 27, 0045, 67 }, { OP(1, 1, 1, OP_CONV), 27, 0045, 67 },
{ OP(1, 1, 1, OP_CONV), 28, 0255, 68 },
{ OP(1, 1, 1, OP_CONV), 31, 0055, 71 },
{ OP(2, 1, 1, OP_CONV), 32, 0265, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0265, 72 },
{ OP(2, 1, 1, OP_CONV), 38, 0065, 75 }, { OP(2, 1, 1, OP_CONV), 38, 0065, 75 },
{ OP(2, 1, 1, OP_CONV), 40, 0275, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0275, 76 },
@ -116,6 +120,8 @@ static dstatement_t bool32_conv_3b_statements[] = {
{ OP(2, 1, 1, OP_CONV), 18, 0235, 61 }, { OP(2, 1, 1, OP_CONV), 18, 0235, 61 },
{ OP(1, 1, 1, OP_CONV), 24, 0045, 64 }, { OP(1, 1, 1, OP_CONV), 24, 0045, 64 },
{ OP(1, 1, 1, OP_CONV), 25, 0245, 65 }, { OP(1, 1, 1, OP_CONV), 25, 0245, 65 },
{ OP(1, 1, 1, OP_CONV), 28, 0055, 68 },
{ OP(1, 1, 1, OP_CONV), 29, 0255, 69 },
{ OP(2, 1, 1, OP_CONV), 32, 0065, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0065, 72 },
{ OP(2, 1, 1, OP_CONV), 34, 0265, 73 }, { OP(2, 1, 1, OP_CONV), 34, 0265, 73 },
{ OP(2, 1, 1, OP_CONV), 40, 0075, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0075, 76 },
@ -128,6 +134,7 @@ static dstatement_t bool32_conv_4_statements[] = {
{ OP(2, 1, 1, OP_CONV), 8, 0325, 56 }, { OP(2, 1, 1, OP_CONV), 8, 0325, 56 },
{ OP(2, 1, 1, OP_CONV), 16, 0335, 60 }, { OP(2, 1, 1, OP_CONV), 16, 0335, 60 },
{ OP(1, 1, 1, OP_CONV), 24, 0345, 64 }, { OP(1, 1, 1, OP_CONV), 24, 0345, 64 },
{ OP(1, 1, 1, OP_CONV), 28, 0355, 68 },
{ OP(2, 1, 1, OP_CONV), 32, 0365, 72 }, { OP(2, 1, 1, OP_CONV), 32, 0365, 72 },
{ OP(2, 1, 1, OP_CONV), 40, 0375, 76 }, { OP(2, 1, 1, OP_CONV), 40, 0375, 76 },
}; };

View File

@ -50,16 +50,16 @@ static pr_ivec4_t ulong_conv_expect[] = {
{ 0x80000000, 0xffffffff, 0x7fffffff, 0}, { 0x80000000, 0xffffffff, 0x7fffffff, 0},
{ 1, 0, -1, -1}, // float { 1, 0, -1, -1}, // float
{ 0, 0, 0, 0x80000000}, // undef? { 0, 0, 0, 0x80000000}, // undef?
{ 0, 0, 0, 0}, // long { 99, 0x80000000, 0x80000000, 99}, // long
{ 0, 0, 0, 0}, { 256, 0, 0x7fffffff, 0},
{ 0, 0, 0, 0x80000000}, // double undef? { 0, 0, 0, 0x80000000}, // double undef?
{ 1, 0, -1, -1}, { 1, 0, -1, -1},
{ 5, 0, -5, 0}, // uint { 5, 0, -5, 0}, // uint
{ 0x80000000, 0, 0x7fffffff, 0}, { 0x80000000, 0, 0x7fffffff, 0},
{ 1, 0, 1, 0}, // bool32 { 1, 0, 1, 0}, // bool32
{ 1, 0, 0, 0}, { 1, 0, 0, 0},
{ 0, 0, 0, 0}, // ulong { 99, 0x80000000, 0x80000000, 99}, // ulong
{ 0, 0, 0, 0}, { 256, 0, 0x7fffffff, 0},
{ 1, 0, 1, 0}, // bool64 { 1, 0, 1, 0}, // bool64
{ 1, 0, 0, 0}, { 1, 0, 0, 0},
}; };
@ -76,11 +76,13 @@ static dstatement_t ulong_conv_1_statements[] = {
{ OP(0, 0, 0, OP_WITH), 4, 113, 2 }, { OP(0, 0, 0, OP_WITH), 4, 113, 2 },
{ OP(1, 1, 2, OP_CONV), 0, 0006, 48 }, { OP(1, 1, 2, OP_CONV), 0, 0006, 48 },
{ OP(1, 1, 2, OP_CONV), 4, 0016, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0016, 56 },
{ OP(2, 1, 2, OP_CONV), 8, 0026, 64 },
{ OP(2, 1, 2, OP_CONV), 16, 0036, 72 }, { OP(2, 1, 2, OP_CONV), 16, 0036, 72 },
{ OP(1, 1, 2, OP_CONV), 24, 0046, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0046, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0056, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0056, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0066, 96 },
{ OP(2, 1, 2, OP_CONV), 40, 0076, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0076, 104 },
{ OP(0, 0, 0, OP_JUMP_A), -12, 0, 0 }, { OP(0, 0, 0, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t ulong_conv_2_statements[] = { static dstatement_t ulong_conv_2_statements[] = {
@ -95,11 +97,13 @@ static dstatement_t ulong_conv_2_statements[] = {
{ OP(0, 0, 0, OP_WITH), 4, 113, 2 }, { OP(0, 0, 0, OP_WITH), 4, 113, 2 },
{ OP(1, 1, 2, OP_CONV), 0, 0106, 48 }, { OP(1, 1, 2, OP_CONV), 0, 0106, 48 },
{ OP(1, 1, 2, OP_CONV), 4, 0116, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0116, 56 },
{ OP(2, 1, 2, OP_CONV), 8, 0126, 64 },
{ OP(2, 1, 2, OP_CONV), 16, 0136, 72 }, { OP(2, 1, 2, OP_CONV), 16, 0136, 72 },
{ OP(1, 1, 2, OP_CONV), 24, 0146, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0146, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0156, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0156, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0166, 96 },
{ OP(2, 1, 2, OP_CONV), 40, 0176, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0176, 104 },
{ OP(0, 0, 0, OP_JUMP_A), -12, 0, 0 }, { OP(0, 0, 0, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t ulong_conv_3a_statements[] = { static dstatement_t ulong_conv_3a_statements[] = {
@ -107,12 +111,16 @@ static dstatement_t ulong_conv_3a_statements[] = {
{ OP(1, 1, 2, OP_CONV), 3, 0006, 54 }, { OP(1, 1, 2, OP_CONV), 3, 0006, 54 },
{ OP(1, 1, 2, OP_CONV), 4, 0216, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0216, 56 },
{ OP(1, 1, 2, OP_CONV), 7, 0016, 62 }, { OP(1, 1, 2, OP_CONV), 7, 0016, 62 },
{ OP(2, 1, 2, OP_CONV), 8, 0226, 64 },
{ OP(2, 1, 2, OP_CONV), 14, 0026, 70 },
{ OP(2, 1, 2, OP_CONV), 16, 0236, 72 }, { OP(2, 1, 2, OP_CONV), 16, 0236, 72 },
{ OP(2, 1, 2, OP_CONV), 22, 0036, 78 }, { OP(2, 1, 2, OP_CONV), 22, 0036, 78 },
{ OP(1, 1, 2, OP_CONV), 24, 0246, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0246, 80 },
{ OP(1, 1, 2, OP_CONV), 27, 0046, 86 }, { OP(1, 1, 2, OP_CONV), 27, 0046, 86 },
{ OP(1, 1, 2, OP_CONV), 28, 0256, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0256, 88 },
{ OP(1, 1, 2, OP_CONV), 31, 0056, 94 }, { OP(1, 1, 2, OP_CONV), 31, 0056, 94 },
{ OP(2, 1, 2, OP_CONV), 32, 0266, 96 },
{ OP(2, 1, 2, OP_CONV), 38, 0066, 102 },
{ OP(2, 1, 2, OP_CONV), 40, 0276, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0276, 104 },
{ OP(2, 1, 2, OP_CONV), 46, 0076, 110 }, { OP(2, 1, 2, OP_CONV), 46, 0076, 110 },
}; };
@ -122,12 +130,16 @@ static dstatement_t ulong_conv_3b_statements[] = {
{ OP(1, 1, 2, OP_CONV), 1, 0206, 50 }, { OP(1, 1, 2, OP_CONV), 1, 0206, 50 },
{ OP(1, 1, 2, OP_CONV), 4, 0016, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0016, 56 },
{ OP(1, 1, 2, OP_CONV), 5, 0216, 58 }, { OP(1, 1, 2, OP_CONV), 5, 0216, 58 },
{ OP(2, 1, 2, OP_CONV), 8, 0026, 64 },
{ OP(2, 1, 2, OP_CONV), 10, 0226, 66 },
{ OP(2, 1, 2, OP_CONV), 16, 0036, 72 }, { OP(2, 1, 2, OP_CONV), 16, 0036, 72 },
{ OP(2, 1, 2, OP_CONV), 18, 0236, 74 }, { OP(2, 1, 2, OP_CONV), 18, 0236, 74 },
{ OP(1, 1, 2, OP_CONV), 24, 0046, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0046, 80 },
{ OP(1, 1, 2, OP_CONV), 25, 0246, 82 }, { OP(1, 1, 2, OP_CONV), 25, 0246, 82 },
{ OP(1, 1, 2, OP_CONV), 28, 0056, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0056, 88 },
{ OP(1, 1, 2, OP_CONV), 29, 0256, 90 }, { OP(1, 1, 2, OP_CONV), 29, 0256, 90 },
{ OP(2, 1, 2, OP_CONV), 32, 0066, 96 },
{ OP(2, 1, 2, OP_CONV), 34, 0266, 98 },
{ OP(2, 1, 2, OP_CONV), 40, 0076, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0076, 104 },
{ OP(2, 1, 2, OP_CONV), 42, 0276, 106 }, { OP(2, 1, 2, OP_CONV), 42, 0276, 106 },
}; };
@ -135,9 +147,11 @@ static dstatement_t ulong_conv_3b_statements[] = {
static dstatement_t ulong_conv_4_statements[] = { static dstatement_t ulong_conv_4_statements[] = {
{ OP(1, 1, 2, OP_CONV), 0, 0306, 48 }, { OP(1, 1, 2, OP_CONV), 0, 0306, 48 },
{ OP(1, 1, 2, OP_CONV), 4, 0316, 56 }, { OP(1, 1, 2, OP_CONV), 4, 0316, 56 },
{ OP(2, 1, 2, OP_CONV), 8, 0326, 64 },
{ OP(2, 1, 2, OP_CONV), 16, 0336, 72 }, { OP(2, 1, 2, OP_CONV), 16, 0336, 72 },
{ OP(1, 1, 2, OP_CONV), 24, 0346, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0346, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0356, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0356, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0366, 96 },
{ OP(2, 1, 2, OP_CONV), 40, 0376, 104 }, { OP(2, 1, 2, OP_CONV), 40, 0376, 104 },
}; };

View File

@ -60,8 +60,8 @@ static pr_ivec4_t bool64_conv_expect[] = {
{ 0xffffffff, 0xffffffff, 0, 0}, { 0xffffffff, 0xffffffff, 0, 0},
{ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}, // ulong { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}, // ulong
{ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}, { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff},
{ 0, 0, 0, 0}, // bool64 { ~0, ~0, ~0, 0}, // bool64
{ 0, 0, 0, 0}, { 0, ~0, 0, 0},
}; };
static dstatement_t bool64_conv_1_statements[] = { static dstatement_t bool64_conv_1_statements[] = {
@ -81,7 +81,8 @@ static dstatement_t bool64_conv_1_statements[] = {
{ OP(1, 1, 2, OP_CONV), 24, 0047, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0047, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0057, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0057, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0067, 96 }, { OP(2, 1, 2, OP_CONV), 32, 0067, 96 },
{ OP(0, 0, 0, OP_JUMP_A), -13, 0, 0 }, { OP(2, 1, 2, OP_CONV), 40, 0077, 104 },
{ OP(0, 0, 0, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t bool64_conv_2_statements[] = { static dstatement_t bool64_conv_2_statements[] = {
@ -101,7 +102,8 @@ static dstatement_t bool64_conv_2_statements[] = {
{ OP(1, 1, 2, OP_CONV), 24, 0147, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0147, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0157, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0157, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0167, 96 }, { OP(2, 1, 2, OP_CONV), 32, 0167, 96 },
{ OP(0, 0, 0, OP_JUMP_A), -13, 0, 0 }, { OP(2, 1, 2, OP_CONV), 40, 0177, 104 },
{ OP(0, 0, 0, OP_JUMP_A), -14, 0, 0 },
}; };
static dstatement_t bool64_conv_3a_statements[] = { static dstatement_t bool64_conv_3a_statements[] = {
@ -119,6 +121,8 @@ static dstatement_t bool64_conv_3a_statements[] = {
{ OP(1, 1, 2, OP_CONV), 31, 0057, 94 }, { OP(1, 1, 2, OP_CONV), 31, 0057, 94 },
{ OP(2, 1, 2, OP_CONV), 32, 0267, 96 }, { OP(2, 1, 2, OP_CONV), 32, 0267, 96 },
{ OP(2, 1, 2, OP_CONV), 38, 0067, 102 }, { OP(2, 1, 2, OP_CONV), 38, 0067, 102 },
{ OP(2, 1, 2, OP_CONV), 40, 0277, 104 },
{ OP(2, 1, 2, OP_CONV), 46, 0077, 110 },
}; };
static dstatement_t bool64_conv_3b_statements[] = { static dstatement_t bool64_conv_3b_statements[] = {
@ -136,6 +140,8 @@ static dstatement_t bool64_conv_3b_statements[] = {
{ OP(1, 1, 2, OP_CONV), 29, 0257, 90 }, { OP(1, 1, 2, OP_CONV), 29, 0257, 90 },
{ OP(2, 1, 2, OP_CONV), 32, 0067, 96 }, { OP(2, 1, 2, OP_CONV), 32, 0067, 96 },
{ OP(2, 1, 2, OP_CONV), 34, 0267, 98 }, { OP(2, 1, 2, OP_CONV), 34, 0267, 98 },
{ OP(2, 1, 2, OP_CONV), 40, 0077, 104 },
{ OP(2, 1, 2, OP_CONV), 42, 0277, 106 },
}; };
static dstatement_t bool64_conv_4_statements[] = { static dstatement_t bool64_conv_4_statements[] = {
@ -146,6 +152,7 @@ static dstatement_t bool64_conv_4_statements[] = {
{ OP(1, 1, 2, OP_CONV), 24, 0347, 80 }, { OP(1, 1, 2, OP_CONV), 24, 0347, 80 },
{ OP(1, 1, 2, OP_CONV), 28, 0357, 88 }, { OP(1, 1, 2, OP_CONV), 28, 0357, 88 },
{ OP(2, 1, 2, OP_CONV), 32, 0367, 96 }, { OP(2, 1, 2, OP_CONV), 32, 0367, 96 },
{ OP(2, 1, 2, OP_CONV), 40, 0377, 104 },
}; };
test_t tests[] = { test_t tests[] = {