calc: boolean expressions
[m6w6/ext-psi] / scripts / gen_int.php
1 <?php
2
3 $types = [
4 "INT8" => "i8",
5 "UINT8" => "u8",
6 "INT16" => "i16",
7 "UINT16" => "u16",
8 "INT32" => "i32",
9 "UINT32" => "u32",
10 "INT64" => "i64",
11 "UINT64" => "u64",
12 ];
13
14 printf("\tswitch (t1) { \\\n");
15 foreach ($types as $t1 => $f1) {
16 $s1 = substr($f1, 1);
17 $u1 = $f1{0} == "u";
18 printf("\tcase PSI_T_%s: \\\n", $t1);
19 printf("\t\tswitch (t2) { \\\n");
20 foreach ($types as $t2 => $f2) {
21 $s2 = substr($f2, 1);
22 $u2 = $f2{0} == "u";
23
24 if ($u1 && $u2) {
25 $fr = "u".min(64,max($s1*2,$s2*2));
26 } else {
27 $fr = "i".min(64,max($s1*2,$s2*2));
28 }
29
30 printf("\t\tcase PSI_T_%s:\tPSI_CALC_OP2(%s, %s, %s);\treturn PSI_T_%s; \\\n",
31 $t2, $fr, $f1, $f2, str_replace(["u","i"], ["UINT","INT"], $fr));
32 }
33 printf("\t\tEMPTY_SWITCH_DEFAULT_CASE(); \\\n\t\t} \\\n\t\tbreak; \\\n");
34 }
35 printf("\tEMPTY_SWITCH_DEFAULT_CASE(); \\\n\t} \\\n");